端末自体で実行されるプロセスで端末エミュレータのPIDを知る方法

端末自体で実行されるプロセスで端末エミュレータのPIDを知る方法

複数の端末が同時に実行され、新しい端末を起動してプログラム(例えばgnome-terminal -e pathto/myprogram)を実行している状況では、myprogram今すぐ把握する必要があります。具体的gnome-terminalに実行中のPIDです。これはどのように達成できますか?

ベストアンサー1

ターミナルまたはターミナルエミュレータで実行されているアプリケーションの入力/出力は、デバイスファイル/dev/ttysomethingから来ます。/dev/ptsomething

もう一方の端(1つ以上の疑似端末またはシリアル回線またはssh / telnet / rsh接続を含むことがあります)では、いくつかの物理、仮想、またはシミュレーション端末(おそらくブラウザウィンドウで実行されるjavascriptで書かれています)が実行されます。一部のローカルまたはリモートコンピュータは出力を読み取って画面に文字を表示し、入力した内容を文字として送信して入力を設定します。

このようにすると、「pid」を取得することは常に可能であるか、関連性/有用ではありません。 PIDを取得することもできますが、他のコンピュータで実行されているWebブラウザのPIDかもしれません。

これを行うことができ、あなたが好きな場合は限られていますgnome-terminal -e cmd

gnome-terminalしかし、クライアント/サーバーアーキテクチャがあるので、特別なケースです。gnome-terminal -e cmd、新しいターミナルエミュレータを実行する代わりに、仮想xterm -e cmdttyペアを作成し、cmdスレーブ側でI / Oサブプロセスを実行してgnome-terminal実行するようにサーバーに新しいgnomeターミナルウィンドウを開くように要求しますcmd

また、最新バージョンでは、次の警告に注意してください。

# Option “-e” is deprecated and might be removed in a later version of gnome-terminal.
# Use “-- ” to terminate the options and put the command line to execute after it.

2回実行してgnome-terminal -e zshビューシェルの祖先を実行すると、pstree -slpa $$次のようになります。

$ pstree -slpa $$
systemd,1 splash
  └─systemd,7571 --user
      └─gnome-terminal-,27110
          └─zsh,27811
              └─pstree,27988 -slpa 27811
$ pstree -slpa $$
systemd,1 splash
  └─systemd,7571 --user
      └─gnome-terminal-,27110
          └─zsh,28134
              └─pstree,28145 -slpa 28134

zshこれはマルチスレッドにもかかわらず、両方のsを起動するのと同じプロセスです。

$ ps -Lp 27110
    PID     LWP TTY          TIME CMD
  27110   27110 ?        00:00:01 gnome-terminal-
  27110   27111 ?        00:00:00 gmain
  27110   27113 ?        00:00:00 dconf worker
  27110   27114 ?        00:00:00 gdbus

両方のウィンドウは同じスレッドによって処理されます。

27110 pid(ほとんどのシェルで見つけることができますgetppid())を持つことは$PPIDあまり役に立ちません。これを殺すと、最終的に管理するすべてのウィンドウを終了します。

現在のウィンドウを終了するには、そのウィンドウ内で終了するだけですcmd

おすすめ記事