スクリプトのこの部分はうまくいきますが:
geany &
pid=$!
...
kill -KILL $pid
逆にそうではありません。
lxterminal &
pid=$!
...
kill -KILL $pid
bashプロセスはまだバックグラウンドにあるようですが、終了しません$pid
。後でプロセスを終了できるように、ターミナルウィンドウのPIDをどのように取得しますか?
注:名前で終了しようとしましたが、その--title
オプションが原因ですPROMPT_COMMAND
。
ベストアンサー1
もちろん、lxterminal
サブプロセスは分岐します。考えてみてください。子プロセスはエミュレートされた端末に接続された対話型シェルパススルーlxterminal
(またはオプションに付属の代替プログラム-e
)。これにより、そのシェルで実際に実行する操作に応じて追加の孫プロセスが作成されます。
Killingはlxterminal
使用する疑似端末のマスター側を閉じ、スレーブ側では端末が停止しているように見えます。スレーブは対話型シェルの制御端末と見なされます。したがって、SIGHUP
端末-hupcl
設定がオンの場合、シェルは一般的な端末停止を確認し、セッションリーダーを作成する必要があります。セッションリーダーはシェルプロセスです。
セッションリーダーはセッション内のジョブ制御を担当し、すべてのジョブに切断信号を渡します。明らかに、そのシェルを介してdisown
edまたはnohup
pedを実行した場合、セッションリーダーはハング信号を送信せず、終了し、lxterminal
疑似端末の基本的な側面が閉じていても何かが実行され続けます。これはdisown
何ですかnohup
する。
疑似端末が停止したときに対話型セッションで実行されているすべての項目が消えない理由を特定する必要があります。あなたはそれが何であるか私達に言わなかったし、私達はテレパシーをすることができません。したがって、セッションリーダーシェルが何をするように設計されているかについての一般的な説明以外に提案することはありません。