昨天我从家里给了一个远程服务器的工作。命令是
sh run.sh >& out &
run.sh将以递归方式超过1000次执行程序(average.f)。 今天,在我的办公室里,我在run.sh中发现了一些错误。所以我想杀了它。
我使用了top命令,但它没有显示run.sh.它只显示average.f。所以,有一次,我用杀死PID杀死了它,它再次以另一个PID启动average.f并产生输出。
ps -u没有显示run.sh或average.f。
任何人都可以帮我解决这个问题。
答案 0 :(得分:2)
使用流程或应用程序名称查找您的工作ID。示例如下 - 我在这里杀了java进程
//上面的命令会给你pid,现在点击命令以杀死那份工作
//这里pid是一个从第一个命令
获得的数字答案 1 :(得分:1)
ps -ef | grep run.sh | grep -v grep | awk '{print $2}' | xargs kill -9
答案 2 :(得分:0)
使用pstree(1)(可能为pstree -p
)列出流程树层次结构,然后kill(1)(首先使用-TERM
,然后使用-QUIT
,以及这不起作用,最后与-KILL
)运行run.sh
的最顶层shell进程(或者少数"更高"进程)。也许使用killall(1)或pidof(1)(或pgrep(1)或pkill
)
您可能想要使用负pid杀死process group。
您应该从不在第一个kill -KILL
进程(但仅限于 last 度假村);一些程序(例如数据库服务器,带有application checkpointing的复杂数值计算,......)安装了SIGTERM
或SIGQUIT
信号处理程序来清理它们的混乱,例如以理智的方式保存一些状态(在磁盘上)。如果你kill -KILL
他们,他们可能会留下未清理的混乱(因为SIGKILL
无法捕获,请参阅signal(7) ....)
顺便说一下,您应该使用ps auxw
列出所有流程,请阅读ps(1)