特定の引数を持つプロセスを見つけて強制終了するBashスクリプト?


17

ssh-D引数(ローカルプロキシのセットアップ)を使用して実行されるインスタンスを強制終了するスクリプトが必要です。

手動で、ps -A | grep -i ssh-Dを使用してインスタンスを検索し、各インスタンスを検索しますkill -9 {id}

しかし、bashスクリプト形式ではどのように見えますか?

(私はMac OS Xを使用していますが、必要なコマンドはを介してインストールしますport


Mac OS Xでのpgrepとpkillの代替案をご覧くださいpgrepおよびpkillは、SolarisおよびLinuxで名前によってプロセスを確実に検索または強制終了するコマンドです。
ジル 'SO-悪である停止

回答:


26

実行pgrep -f "ssh.*-D"して、正しいプロセスIDが返されるかどうかを確認します。存在する場合は、同じオプションとパターンに変更pgrepしてpkillそのままにしてください

また、kill -9プログラムは終了前にSIGKILLをトラップしてクリーンアップすることができないため、絶対に必要でない限り、別名SIGKILLを使用しないでください。私が唯一の使用kill -9最初試した後-1 -2-3


キルをそれぞれのforループとして再定義する必要kill -iがありiます;)
Seamus

1
pgrepOSXにネイティブではないため、サードパーティから入手する必要があります。このトピックに関する以前のスレッドには、提案と代替案があります。
ジル 'SO-悪であるのをやめる'

生きている男、私は 'nixを使用すればするほど、それを愛します:)
javamonkey79

pgrepとpkillは、OS X 10.8(Mountain Lion)以降で使用できます。 apple.blogoverflow.com/2012/07/…–
ピーターハンリー

プロセスIDだけでなく、コマンド(引数を含む)も印刷する-aフラグを追加すると便利な場合pgrepがあります。これにより、目的のプロセスのみが一致することを非常に簡単に確認できます。
ルアー


0

procファイルシステムを活用して、情報を収集できます。例えば:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

完全ではありません。より排他的な正規表現が必要です(特にプロセスを強制終了する場合)がecho $proc | awk -F'/' '{ print $3 }'、プロセスのPIDが表示されます。


1
OSXにはありません/proc。そして、これを行うための堅牢なツールが既にpgrepあります(少なくともSolarisおよびLinuxでネイティブに利用可能)。
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.