$!捕捉されていないbashプロセスのPID

$!捕捉されていないbashプロセスのPID

スクリプトのこの部分はうまくいきますが:

geany &
pid=$!
...
kill -KILL $pid

逆にそうではありません。

lxterminal &
pid=$!
...
kill -KILL $pid

bashプロセスはまだバックグラウンドにあるようですが、終了しません$pid。後でプロセスを終了できるように、ターミナルウィンドウのPIDをどのように取得しますか?

注:名前で終了しようとしましたが、その--titleオプションが原因ですPROMPT_COMMAND

ベストアンサー1

もちろん、lxterminalサブプロセスは分岐します。考えてみてください。子プロセスはエミュレートされた端末に接続された対話型シェルパススルーlxterminal(またはオプションに付属の代替プログラム-e)。これにより、そのシェルで実際に実行する操作に応じて追加の孫プロセスが作成されます。

Killingはlxterminal使用する疑似端末のマスター側を閉じ、スレーブ側では端末が停止しているように見えます。スレーブは対話型シェルの制御端末と見なされます。したがって、SIGHUP端末-hupcl設定がオンの場合、シェルは一般的な端末停止を確認し、セッションリーダーを作成する必要があります。セッションリーダーはシェルプロセスです。

セッションリーダーはセッション内のジョブ制御を担当し、すべてのジョブに切断信号を渡します。明らかに、そのシェルを介してdisownedまたはnohuppedを実行した場合、セッションリーダーはハング信号を送信せず、終了し、lxterminal疑似端末の基本的な側面が閉じていても何かが実行され続けます。これはdisown何ですかnohup する

疑似端末が停止したときに対話型セッションで実行されているすべての項目が消えない理由を特定する必要があります。あなたはそれが何であるか私達に言わなかったし、私達はテレパシーをすることができません。したがって、セッションリーダーシェルが何をするように設計されているかについての一般的な説明以外に提案することはありません。

おすすめ記事