2000 個のジョブがキューに入れられていて、それらをqdel allで削除しようとすると、実行中のジョブを最初に削除しようとし続けるという問題があります。Runningこれは、リストからの削除がリストよりも遅いため、ジョブが削除されるまで長い間待たなければならないことを意味しIdleます。
Idleしたがって、ジョブに触れずにすべてのジョブを削除するにはどうすればよいRunningですか?
2000 個のジョブがキューに入れられていて、それらをqdel allで削除しようとすると、実行中のジョブを最初に削除しようとし続けるという問題があります。Runningこれは、リストからの削除がリストよりも遅いため、ジョブが削除されるまで長い間待たなければならないことを意味しIdleます。
Idleしたがって、ジョブに触れずにすべてのジョブを削除するにはどうすればよいRunningですか?
ジョブ ID が連続している場合は、Bash のブレース拡張を使用できます。例えば:
$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
1000 から 2000 までの範囲のすべてのジョブを削除するために転送すると、qdelコマンドは次のようになります。
qdel {1000..2000}
これは、(他のユーザーから) 削除することを許可されていないジョブ ID がある場合でも機能する可能性があります。それらは単に無視する必要があります。(未検証)
パイソン:
import os
import subprocess
cmd = [ 'showq' ]
output = subprocess.Popen( cmd, stdout=subprocess.PIPE ).communicate()[0]
jobid = [int(s) for s in output.split() if s.isdigit()]
jobid2 = []
for i in jobid:
if i > 100000:
jobid2 += [i]
jobid2.sort()
jobid2.reverse()
#jobid2 = jobid2[2000:3000]
for i in jobid2:
print len(jobid2)
os.system('qdel ' + str(i))