gpt4 book ai didi

linux - 自动化 Killall 然后 Killall 9 级

转载 作者:IT王子 更新时间:2023-10-29 00:58:29 26 4
gpt4 key购买 nike

有时我想killall某个进程,但是运行killall却不起作用。因此,当我尝试再次启动该进程时,它失败了,因为前一个 session 仍在运行。然后我必须在上面繁琐地运行 killall -9 。所以为了简化我的生活,我创建了一个 realkill 脚本,它是这样的:

PIDS=$(ps aux | grep -i "$@" | awk '{ print $2 }') # Get matching pid's.
kill $PIDS 2> /dev/null # Try to kill all pid's.
sleep 3
kill -9 $PIDS 2> /dev/null # Force quit any remaining pid's.

那么,这是最好的方法吗?我可以通过哪些方式改进此脚本?

最佳答案

如果可以,请避免使用 killall,因为在所有 UNIX 平台上没有一致的实现。 Proctools' pkillpgrep 更可取:

for procname; do
pkill "$procname"
done

sleep 3
for procname; do
# Why check if the process exists if you're just going to `SIGKILL` it?
pkill -9 "$procname"
done

(编辑)如果您有应该在被杀死后重新启动的进程,您可能不想盲目地杀死它们,因此您可以先收集 PID:

pids=()
for procname; do
pids+=($(pgrep "$procname"))
done
# then proceed with `kill`

也就是说,如果可以的话,您真的应该尽量避免使用 SIGKILL。它不会让软件有机会自行清理。如果程序在收到 SIGTERM 后不会立即退出,它可能正在等待某些事情。找出它在等待什么(硬件中断?打开文件?)并修复它,您就可以让它干净地关闭。

关于linux - 自动化 Killall 然后 Killall 9 级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com