我写了一个脚本,用来终止卡住的进程。首先,它会尝试最弱的 SIGTERM,如果不起作用,它会尝试 SIGHUP,如果这也没有用,它会发出 SIGKILL。现在我想试试这个脚本是否真的有效。
我怎样才能使进程卡住或堵塞,以便只能通过 HUP 或 KILL 信号来停止它?
答案1
可能最简单的方法是编写一个最小的 bash 脚本,使用内置函数trap
指定自定义信号处理程序:
#!/bin/bash
function mysighandler {
printf 'ignoring TERM signal\n'
}
trap mysighandler SIGTERM
while :
do
printf 'Running. . .\n'
sleep 2
done
您可以将处理程序设置为空字符串,这将导致信号被默默忽略 - 但创建一个最小处理程序可以让您确认它已被拦截。
或者,编写一个使用 API 的小型 C 程序signal
- 参见man 2 signal
。