gpt4 book ai didi

linux - 在 bash 中捕获 process.kill?

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:03 27 4
gpt4 key购买 nike

我正在尝试通过进程类运行一个 bash 脚本,并在我使用 process.kil() 时做一些事情但似乎没有触发退出信号:

一个。可能吗?

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 并没有改变结果。

最佳答案

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

但是,bash 有一个名为 EXIT 的伪信号。在 Bash Manual - Bourne Shell Builtins - trap 中进行了描述这是您可能感到困惑的地方。

If a sigspec is 0 or EXIT, arg is executed when the shell exits. If a sigspec is DEBUG, the command arg is executed before every simple command, for command, case command, select command, every arithmetic for command, and before the first command executes in a shell function. Refer to the description of the extdebug option to the shopt builtin (see The Shopt Builtin) for details of its effect on the DEBUG trap. If a sigspec is RETURN, the command arg is executed each time a shell function or a script executed with the . or source builtins finishes executing

如果你打算使用它,那么你应该使用以下行开始你的脚本:

#!/bin/bash

确保它在 bash shell 下运行。

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

关于linux - 在 bash 中捕获 process.kill?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com