假设有一个名为的简单脚本action.sh
:
#!/bin/bash
echo -n 'a' | nc a.b.c.d p
动作.sh这里放置一个a
要寻址的字符a.b.c.d
。
但是,nc
有时会挂起,我想杀死它:
$ ./action.sh
^C
这工作正常,没有僵尸留下。
当我将其放入后台并尝试终止它时,它nc
保持活动状态,我需要手动清理:
& ./action.sh &
[1] 28747
& kill -15 28747 //here nc is still running! I have to find its PID and terminate it
有没有办法在收到终止信号时也要求action.sh
终止?nc
答案1
#!/bin/bash
trap ctrl_c INT
function ctrl_c() {
# redirect to stderr to avoid showing errors in case nc isn't found
kill -9 $(pgrep nc) > /dev/null 2>&1
}
echo -n 'a' | nc a.b.c.d p
答案2
这也可以通过kill
如下调用来实现:
kill 15 -28747
15是终止信号(使用 9 表示终止),并且28747是我问题中父进程的PID。