如何识别从您的用户帐户提供的工作并将其终止

How to identify a job given from your user account and kill it

昨天我在家里的远程服务器上找到了一份工作。命令是

sh run.sh >& out &

run.sh会递归执行一个程序(average.f)超过1000次。 今天,在我的办公室,我发现我的 run.sh 有一些错误。所以我想杀了它。

我使用了 top 命令,但它没有显示 run.sh。它只显示 average.f。所以,有一次,我用 kill PID 杀死了它,它又开始 average.f 另一个 PID 并产生输出。

ps -u 未显示 run.sh 或 average.f。

任何人都可以帮助我如何结束这份工作。

使用pstree(1) (probably as pstree -p) to list the process tree hierarchy, then kill(1) (first with -TERM, then with -QUIT, and if that does not work, at last with -KILL) your topmost shell process running run.sh (or else the few "higher" processes). Perhaps use killall(1) or pidof(1) (or pgrep(1)pkill)

您可能想要用负 pid 杀死 process group

你不应该一开始就kill -KILL一个过程(但只在最后度假村);一些程序(例如数据库服务器,复杂的数值计算 application checkpointing, ...) have installed a SIGTERM or SIGQUIT signal handler to clean up their mess and e.g. save some state (on the disk) in a sane way. If you kill -KILL them, they could leave the mess uncleaned (since SIGKILL cannot be caught, see signal(7)...)

顺便说一句,你应该使用 ps auxw 列出所有进程,阅读 ps(1)

ps -ef | grep run.sh | grep -v grep | awk '{print }' | xargs kill -9

使用流程或应用程序名称查找您的工作 ID。下面给出了示例 - 我在这里杀死 java 进程

ps -aef|grep java

// 上面的命令会给你 pid,现在在下面的命令中执行以终止那个作业

kill -9 pid

// 这里的 pid 是你从第一个命令得到的数字