我在计算机网格中运行物理分析工作。有时工作会出错,我不得不(一项一项地)杀死它们,这很痛苦。您能否建议我如何从此输出中仅选择数值(748736838 等):
$ps -W
mhaque -748736838 0 W
mhaque -748736879 0 W
mhaque -748737079 0 W
mhaque -748737185 0 W
mhaque -748737276 0 W
(以及像这样的数百行)
我尝试了几个sed
//命令(来自 stackExchange) awk
,grep
但无法分隔数值。是否有命令可以选择数值并在它们前面放置“kill”?例如这样的东西(管道):
ps -W | awk/sed/grep (what_to_use) | (some_command to place "kill") | > file.list
这会给我以下内容(在 file.list 中):
kill 748736838
kill 748736879
...so on..
然后我可以简单地将其复制粘贴到网格外壳中以杀死所有有问题/长时间等待的作业。
答案1
如果你想杀人全部的姆哈克工作,做起来更简单:
pkill -9 mhaque
(-9是要发送的信号,在本例中我选择信号杀死,请根据您的需要进行更改)。
还,
pidof mhaque
返回作业 PID 的简单列表,没有其他内容。您也可以按如下方式使用它
kill -9 $(pidof mhaque)
它产生与第一个命令相同的效果。所有这些都比编写脚本容易得多。例如,
$ vlc fulvio.mkv &> /dev/null &
[1] 28006
$ vlc fulvio.mkv &> /dev/null &
[2] 28028
$ pidof vlc
28028 28006
$ pkill -9 vlc
$ ps ax | grep vlc
28054 pts/18 S+ 0:00 grep --color=auto vlc
[1]- Killed vlc fulvio.mkv &> /dev/null
[2]+ Killed vlc fulvio.mkv &> /dev/null
编辑:
为了回复评论中包含的澄清,命令
ps -W | awk '{print $2}' | cut -d"-" -f2
生成作业 PID 的简单列表。您可以将它们写入文件,或直接处理它们
kill -9 $(ps -W | awk '{print $2}' | cut -d"-" -f2)
编辑2
我有点惊讶这并没有按预期工作,因为上面的命令只是标准的 Bash。你到底在哪个系统上?无论如何,您可以尝试:
for i in $(ps -W | awk '{print $2}' | cut -d"-" -f2); do kill -9 $i; done