アクティブな端末エミュレータで実行されているアプリケーションのPIDを取得します。

アクティブな端末エミュレータで実行されているアプリケーションのPIDを取得します。

urxvt私の究極の目標は、現在アクティブなウィンドウで実行されているプログラムの現在の作業ディレクトリから直接新しいターミナルウィンドウ()を開くことです。

私は現在シェルを使用していますが、代わりに反対するものはありません。

これまで、次のコマンドを使用して現在アクティブなウィンドウのIDを取得しましたxdotool

wid=$(xdotool getactivewindow)

以下を使用するプロセスのPID xprop:

pid=$(xprop -id $wid _NET_WM_PID | awk '{print $NF}')

しかし、これは私が探しているPIDではありません。 端末で実行されているプロセスのPIDをこのウィンドウに表示したいと思います。 現在は主にそのウィンドウでシェルが実行される場合を望んでいますbashが、なぜそれに依存するのか理解できません。

すでにPIDを使用してPIDからCWDを取得できますcwd="$(readlink /proc/$pid/cwd)"

ベストアンサー1

おそらく:

readlink "/proc/$(
    pgrep -P "$(xdotool getactivewindow getwindowpid)" | head -n1
  )/cwd"

つまり、を使用してウィンドウに関連付けられているpidを取得し、をxdotool使用pgrepしてそのプロセスの子プロセスのリストを取得し、head -n1最初のプロセスのみを選択してからをreadlink使用して作業ディレクトリをインポートします。

すべてのウィンドウで使用できるわけではありません。たとえば、リモートクライアントのウィンドウやウィンドウマネージャにPIDを提供しないウィンドウや他のユーザーのプロセスには適用されません。

おすすめ記事