7

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

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

これは私にとってはうまくいきます。しかし、バックグラウンド プロセスとして gnome-terminal を起動すると

$gnome-terminal &
$PID=$!
$ps -e | grep $PID

次に、実行中のすべてのプロセスのリストに見つかりません。

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

4

3 に答える 3

13

「--disable-factory」オプションを gnome-terminal に使用すると、gnome-terminal を希望どおりに使用できます。デフォルトでは、すでにアクティブな端末を使用しようとするため、起動した端末の 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
于 2011-07-28T15:05:03.503 に答える
6

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

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

于 2011-07-13T12:39:52.410 に答える
1

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

gnome-terminal は 1 回だけインスタンス化されることがわかったので、特定のタスクの短いスクリプトを次に示します。

GNOME_TERMINAL_PID=`pidof gnome-terminal`

pidof がない場合:

GNOME_TERMINAL_PID=`grep Name: */status | grep gnome-terminal | cut -d/ -f1`
于 2011-07-13T13:22:23.543 に答える