杀死一个进程,并强制它在Linux中返回0?

在Linux环境中,我怎样才能发送kill信号给进程,同时确保从进程返回的退出代码是0? 我需要为此做一些奇特的GDB魔术,还是有一个我不知道的奇特的杀手信号?

testing用例:

cat; echo $? killall cat 

尝试各种kill信号只会提供不同的返回信号,如129,137和143,我的目标是杀死一个脚本运行的进程,但让脚本认为它是成功的。

您可以使用GDB和进程ID附加到进程,然后以exit(0)作为参数发出call命令。

call允许您在正在运行的程序中调用函数。 调用exit(0)退出,返回码为0。

 gdb -p <process name> .... .... Gdb output clipped (gdb) call exit(0) Program exited normally. 

作为一个单线工具:

 gdb --batch --eval-command 'call exit(0)' --pid <process id> 

不。当shell捕获SIGCHLD它无条件地将返回值设置为一个非零值,所以需要修改脚本或shell。

有点哈克的方式,但..

你可以为你的进程创build一个包装器,覆盖SIGCHLD Handler。 例如:

 #!/bin/bash set -o monitor trap 'exit(0)' CHLD /some/dir/yourcommand 

之后,你可以让你的脚本运行这个包装,而不是你的进程,把它放在$ PATH中,并重命名为相同的名称。

我不知道,但如果收到任何列出的信号,这将退出0。 您可以执行其他操作,包括调用函数等。

 #!/bin/bash trap 'exit 0' SIGINT SIGQUIT SIGTERM 

这一行代码为我工作:

 /bin/bash -c '/usr/bin/killall -q process_name; exit 0'