Linux下批量Kill多个进程的方法

前言

今天在疯狂地提交计算任务,提交了550多个任务,但是在提交的过程之中,难免会出现一些失误,提交了错误的参数或者设置了错误的程序运行条件。同时因为在深圳的机器是和另一个组的同学同时使用机器,所以经常出现的情况是——当她运行程序的时候,我需要停下来先让师姐运行起来我再接着提交任务。原因就是,我的程序都是单核任务为主,而师姐的程序则是计算蛋白质的并行程序。

所以很自然的,最高效的计算资源利用方法就是我等师姐的程序提交成功之后提交,这样的话单核任务可以多样地被分配到各个节点上而不用等节点空闲来运行并行程序。我们可以最充分地利用组里在深圳租用的资源。

所以一个使用中的痛点就是,你不得不因为各种各样的原因停止自己的程序。

那么问题来——如何在Linux环境中高效地停止某个任务?

方法

其实实现方法也特别简单,因为ps是可以列出所有当前进程的(深圳超算中心提供了类似的命令bjobs)。下面的问题就是如何将ps列出的进程停止掉,很自然地我们发现Linux已经提供了kill命令。

所以组合一下,最后脚本如下:


#!/bin/sh
psname='chanel9.1'
ps x | grep $psname | grep -v grep | cut -c 1-5 | xargs kill

使用中,需要的修改的部分就是psname,这个字符串代表了你希望停止的进程名字。

这里需要说明我停止的进程都是同一个。所以用这个脚本可以高效地批量停止任务。当然如果你的任务是不同的名字那么其实如果比如进程命名有规律还是可以用grepsort等组合出来的。

参考

我参考了这个网页的方法Linux下批量Kill多个进程的方法

Written on June 22, 2015