2011-07-13 32 views
6

バックグラウンドプロセスを簡単に開始し、pidを見つけて実行中のプロセスのリストで検索することができます。バックグラウンドプロセスのpidを取得する

$gedit & 
$PID=$! 
$ps -e | grep $PID 

これは私に役立ちます。しかし、バックグラウンドプロセスとしてgnome-terminalを起動すると、実行中のすべてのプロセスのリストにGNOME-terminalが見つかりません。

ここに何か不足していますか?

答えて

5

これは、起動したgnome-terminalプロセスがプロセス自体を開始してから終了するためです。したがって、キャプチャするPIDは起動してから実際の端末をフォークする「スタブ」プロセスのPIDです。これにより、発信端末から完全に切り離すことができます。

残念ながら、残っている "granchild" gnome-terminalプロセスのPIDをキャプチャする方法はわかりません。 psを実行すると、親pidが1で実行されているGNOME端末の「孫」プロセスが表示されます。

1

(これは単なる脚注です)@Sodvedによると、gnome-terminalはプロセス自体を開始して終了します孫のpidを得る方法はありません。 (親プロセスが終了したときに子プロセスが祖父母プロセスに再接続しない理由については、第7章も参照してください。)

gnome-terminalは一度しかインスタンス化されていないことがわかりました。あなたの特定のタスク:

GNOME_TERMINAL_PID=`pidof gnome-terminal` 

あなたは持っていない場合はpidof:

GNOME_TERMINAL_PID=`grep Name: */status | grep gnome-terminal | cut -d/ -f1` 
9

あなたは、gnome-terminalのために、それはgnome-terminalの中に使用することは可能だ "--disable-工場" オプションを使用する場合あなたが望むやり方。デフォルトでは、すでにアクティブな端末を使用しようとするので、起動した端末のpidを取得できます。次のスクリプトは、5秒間ウィンドウを開き、それを殺します。

#!/bin/bash 
echo "opening a new terminal" 
gnome-terminal --disable-factory & 
pid=$! 
echo "sleeping" 
sleep 5; 
echo "closing gnome-terminal" 
kill -SIGHUP $pid 
関連する問題