使用`time`运行程序时SIGINT无效,如何彻底终止进程?
解决
time进程无法彻底终止且遗留sleep子进程的问题 问题原因
/usr/bin/time作为独立进程启动sleep后,二者属于同一个进程组:
- 发送
SIGINT时,time进程默认会忽略该信号,因此无法终止; - 发送
SIGTERM仅会终止time进程,但未同步向其子进程sleep发送终止信号,导致sleep成为孤儿进程继续运行。
彻底终止的方法
方法1:杀死整个进程组
利用进程组ID(与time进程PID相同,以负号标识),向整个进程组发送终止信号,同时杀死time和sleep:
kill -TERM -$pid # 若需要强制终止,可使用SIGKILL kill -KILL -$pid
方法2:先终止子进程再终止父进程
通过pgrep找到sleep的PID,先杀死sleep再终止time:
# 找到sleep的PID sleep_pid=$(pgrep -P $pid) # 先杀sleep,再杀time kill $sleep_pid kill $pid
验证效果
执行完终止命令后,可通过ps aux | grep -E "time|sleep"确认两个进程均已退出。
内容的提问来源于stack exchange,提问作者Bubaya
相关产品推荐
相关产品推荐

