2017-11-14 9 views

答えて

0

スクリプト(bashのは、SH、zshの、など)は、そのコマンド名を持つすべてのプロセスを殺す親のコマンド名を見つけることができるため

感謝。 このようにして、すべてのbashプロセスを殺すが、スクリプトを実行するプロセスは終了させる。 即ち

C=$(ps -p $(ps -p $$ -o ppid=) o args=) 
P=$(ps -p $$ -o pid=) 
for p in $(pgrep $C); do 
    if [ $p -ne $P ]; then 
     kill $p 
    fi 
done 

これは非常にないポータブルです。あなたも何かを実行しているコンソールを閉じたい場合には、さらに少ないポータブル次のようになります。スクリプトが(別のスクリプトまたは別のbashのセッション内 bashのセッションで起動された場合

C=$(ps -p $(ps -p $$ -o ppid=) o args=) 
P1=$(ps -p $$ -o pid=) 
P2=$(ps -p $$ -o ppid=) 
echo $(pgrep $C) 
for p in $(pgrep $C | tail -n +2); do 
    [ $p -ne $P1 ] && [ $p -ne $P2 ] && kill -9 $p 
done 
  • は、それが動作しません。
  • デスクトップ環境が がbashによって起動されていない場合(たとえば、起動時にデスクトップ環境が に設定されている場合など)、最初のbashウィンドウを強制終了しません。この問題を解決するには、 forループ内の| tail -n +2
  • また、ウィンドウに加えてコンソールタブも閉じます。
+0

こんにちはオムシラ、ご返信ありがとうございます。質問:スクリプトをどのように使用できますか?私はそれに何かを置き換える必要がありますか? – MSO

+0

他のすべてのコンソールウィンドウを閉じるには、スクリプトにコピーして貼り付けてください。 – Ruocco

+0

こんにちは、それは動作します!しかし、私も何かを実行しているコンソールを閉じる必要があります。それを行うためにあなたのスクリプトを変更することは可能ですか? – MSO

関連する問題