是否可以删除具有相同名称的多个作业,而不是键入每个单独的作业编号?
我不想使用这个qdel -u username
选项,因为我还有其他工作要做。它有+100 个单独的工作,所以如果有更快的选择,我宁愿不输入每个工作编号!
我在网上找到了这个选项;
qdel wc_jobname
但它返回错误,
qdel:非法形成的作业标识符:wc_jobname
答案1
您可以准备一个脚本,该脚本将作业名称作为参数并检查是否存在...如果存在,它将删除该作业...例如,您可以使用此脚本作为参考:
#!/bin/bash
#check processes in standby, which matches with our process name
ps T |grep $1 |grep -v 'grep' |grep -v $0 |awk '{print $1}' > /tmp/temp.txt
i=0
if [ $(cat /tmp/temp.txt |wc -l) -eq 0 ];
then
echo "there are no jobs to kill"
else
#if there are jobs, kill and count them to know how many processes have been killed
while read pid
do
kill -9 $pid
i=$((i+1))
done < /tmp/temp.txt
#show how many jobs have been killed
echo "$i jobs killed"
fi
rm /tmp/temp.txt
答案2
这应该可以解决问题:
jobs -lr | grep -F something | awk '{print $2}' | xargs kill
-l
列出进程 ID
-r
运行作业的限制
答案3
Killall 向运行任何指定命令的所有进程发送信号。如果未指定信号名称,则发送 SIGTERM。
信号可以通过名称(例如 -HUP 或 -SIGHUP )或数字(例如 -1)或选项 -s 来指定。
答案4
你可以这样做qdel [job_name]
。例如,如果作业名称是“analysis1”,则您需要这样做qdel analysis1
。有时你需要添加一个-f
so qdel -f analysis1
。