可以通过作业名称而不是 ID 来取消作业吗?

可以通过作业名称而不是 ID 来取消作业吗?

是否可以删除具有相同名称的多个作业,而不是键入每个单独的作业编号?

我不想使用这个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。有时你需要添加一个-fso qdel -f analysis1

相关内容