如何使用 grep/sed/awk 选择作业 ID

如何使用 grep/sed/awk 选择作业 ID

我在计算机网格中运行物理分析工作。有时工作会出错,我不得不(一项一项地)杀死它们,这很痛苦。您能否建议我如何从此输出中仅选择数值(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) awkgrep但无法分隔数值。是否有命令可以选择数值并在它们前面放置“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

相关内容