在bash中捕获process.kill?

时间:2018-06-25 13:17:50

标签: .net linux ubuntu core

我正在尝试通过流程类运行bash脚本,并在使用process.kil()时执行某些操作 但是似乎退出信号没有触发,所以:

A。有可能吗?

B。如果不可能,是否有办法向过程发送信号?

Script.sh

#!/bin/bash
Exit(){
echo "terminated">>log.txt
kill $child}
trap Exit EXIT
 daemon &
child=$!
echo $child > log.txt
wait $child

C#代码:

Process script = new Process()
script.StartInfo.Filename = "Script.sh"
script.Start()
//Other stuff
script.Kill()

C#脚本。Kill似乎没有在Script.sh中触发Exit()

通过ubuntu的系统监视器退出 确实会触发它。

编辑:

将信号更改为SIGTERM不会改变结果。

1 个答案:

答案 0 :(得分:0)

在UNIX / Linux中没有这样的信号EXIT。 SIGTERM最接近您想要的,并且是kill使用的默认信号。

但是,bash具有一个称为EXIT的伪信号。 Bash Manual - Bourne Shell Builtins - trap中对此进行了描述,您可能会对此感到困惑。

  

如果sigspec为0或EXIT,则在退出外壳程序时执行arg。如果sigspec是DEBUG,则在每个简单命令(对于命令,case命令,select命令,对命令的每个算术)之前以及在shell函数中执行第一个命令之前,都要执行命令arg。有关其对DEBUG陷阱的影响的详细信息,请参考shopt内置的extdebug选项的描述(请参阅Shopt内置的)。如果sigspec为RETURN,则每次执行shell函数或使用。脚本执行脚本时,都会执行arg命令。或源内置命令执行完毕

如果您打算使用此功能,则应使用以下行启动脚本:

#!/bin/bash

以确保它在bash shell下运行。

有关Linux中所有信号的列表,请参见http://man7.org/linux/man-pages/man7/signal.7.html