回答:
実行pgrep -f "ssh.*-D"
して、正しいプロセスIDが返されるかどうかを確認します。存在する場合は、同じオプションとパターンに変更pgrep
してpkill
そのままにしてください
また、kill -9
プログラムは終了前にSIGKILLをトラップしてクリーンアップすることができないため、絶対に必要でない限り、別名SIGKILLを使用しないでください。私が唯一の使用kill -9
最初試した後-1
-2
と-3
。
for
ループとして再定義する必要kill -i
がありi
ます;)
pgrep
OSXにネイティブではないため、サードパーティから入手する必要があります。このトピックに関する以前のスレッドには、提案と代替案があります。
-a
フラグを追加すると便利な場合pgrep
があります。これにより、目的のプロセスのみが一致することを非常に簡単に確認できます。
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が表示されます。
/proc
。そして、これを行うための堅牢なツールが既にpgrep
あります(少なくともSolarisおよびLinuxでネイティブに利用可能)。
pgrep
およびpkill
は、SolarisおよびLinuxで名前によってプロセスを確実に検索または強制終了するコマンドです。