15

タイトルのように - zsh ですべてのバックグラウンド プロセスを強制終了するには?

4

5 に答える 5

15
alias killbg='kill ${${(v)jobstates##*:*:}%=*}'

。これはzshであり、外部ツールは必要ありません。

ジョブ番号Nを強制終了する場合:

function killjob()
{
    emulate -L zsh
    for jobnum in $@ ; do
        kill ${${jobstates[$jobnum]##*:*:}%=*}
    done
}
killjob N
于 2012-10-31T20:52:16.253 に答える
2

@Zxy の応答に対する微調整...

私のシステムでは、中断されたジョブがデフォルトの kill シグナルで適切に強制終了されないことがわかりました。バックグラウンドジョブを適切に終了kill -KILLさせるには、実際に変更する必要がありました。suspended

alias killbg='kill -KILL ${${(v)jobstates##*:*:}%=*}'

この周りの単一引用符に特に注意してください。二重引用符に切り替えた場合は、それぞれの「$」をエスケープする必要があります。このコマンドをラップするためにa を使用できないことに注意してください。functionこれは、関数が配列をインクリメントし、関数が$jobstates自分自身を強制終了しようとするためです... エイリアスを使用する必要があります。

上記のkilljobスクリプトは、次のように実行できるため、少し冗長です。

kill %1

キーストロークが少なく、すでに に組み込まれていzshます。

于 2016-12-08T12:51:01.450 に答える
0
alias killbg='for job in \`jobs -l | egrep -o "([0-9][0-9]+)"`; 
于 2012-10-31T19:58:48.363 に答える