在 Linux 中终止一个进程并强制它返回 0?

在 Linux 中终止一个进程并强制它返回 0?

在 Linux 环境中,如何向进程发送终止信号,同时确保该进程返回的退出代码为 0?我是否必须为此做一些花哨的 GDB 魔术,或者是否存在我不知道的花哨终止信号?

测试用例:

cat; echo $?

killall cat

尝试各种终止信号只会提供不同的返回信号,例如 129、137 和 143。我的目标是终止脚本运行的进程,但让脚本认为它已成功。

答案1

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

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>

答案2

不。当 shell 捕获到它时SIGCHLD,它会无条件地将返回值适当地设置为非零值,因此这需要修改脚本或 shell。

答案3

这行代码对我有用:

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

答案4

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

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

相关内容