linux - 在 bash 中捕获 process.kill?
问题描述
我正在尝试通过进程类运行 bash 脚本并在使用 process.kil() 时执行某些操作但似乎没有触发退出信号,所以:
A. 有可能吗?
B. 如果不可能,有没有办法向进程发送信号?
脚本.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# script.Kill 似乎不会触发 Script.sh 中的 Exit()
通过 ubuntu 的系统监视器退出确实会触发它。
编辑:
将信号更改为 SIGTERM 并没有改变结果。
解决方案
EXIT
在 UNIX/Linux中没有这样的信号。SIGTERM 最接近你想要的,也是 kill 使用的默认信号。
但是,bash 有一个名为EXIT
. 它在Bash 手册 - Bourne Shell Builtins - 陷阱中进行了描述,您可能会对此感到困惑。
如果 sigspec 为 0 或 EXIT,则在 shell 退出时执行 arg。如果 sigspec 是 DEBUG,则命令 arg 在每个简单命令、for 命令、case 命令、select 命令、每个算术 for 命令之前执行,并且在第一个命令在 shell 函数中执行之前执行。有关它对 DEBUG 陷阱的影响的详细信息,请参阅 shopt 内置函数的 extdebug 选项的描述(请参阅 The Shopt Builtin)。如果 sigspec 为 RETURN,则每次使用 . 或源内置完成执行
如果您打算使用它,那么您应该使用以下行开始您的脚本:
#!/bin/bash
以确保它在 bash shell 下运行。
有关 Linux 中所有信号的列表,请参见http://man7.org/linux/man-pages/man7/signal.7.html。
推荐阅读
- javascript - 离子输入禁用不透明度
- c# - Blazor WASM - Global Catch 401 并导航到所有 HttpClient 调用的登录页面
- c# - WinForms c# 应用程序从 AutoMapper 9 升级到 10 问题
- java - 自定义属性在自定义主题中不起作用
- python - Python - 从同一个函数调用中获得不同的结果
- filepond - 使用 FilePond 我的隐藏输入值 =“未定义”和 JSON 响应
- node.js - 如何在 cpanel 共享主机上托管 expressjs 应用程序?
- c# - 如何解决获取实际应用路径base .net Staandard libaray 2.0的发布
- python - 如何将一个 numpy 数组拆分为两个不同大小的新 numpy 数组?
- json - Python - 提取嵌套的json不起作用