我正在尝试通过流程类运行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不会改变结果。
答案 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。