ウィンドウマネージャで起動されたアプリケーションの出力はどこに行きますか?

ウィンドウマネージャで起動されたアプリケーションの出力はどこに行きますか?

端末でアプリケーションを実行するとstdoutとstderrの出力が表示されますが、ウィンドウマネージャでアプリケーションを実行するとこれらのファイルの出力は通常どこに行きますか? /dev/nullで?

ベストアンサー1

ウィンドウマネージャで起動されたアプリケーションの出力は、ウィンドウマネージャ自体の出力と同じ場所にあります。 (アプリケーションがリダイレクトしない限り、一般的なGUIアプリケーションはリダイレクトしません。)

ファイル記述子1(標準出力)とファイル記述子2(標準エラー)で開いている内容を見ると、WMの出力がどこに行くのかがわかります。通常、両方とも同じファイルに移動します。ウィンドウマネージャのプロセスIDを確認します(たとえば、pgrep metacityMetacityがウィンドウマネージャであることを確認します。ウィンドウマネージャのプロセス名がわからない場合は、pidof metacityプロセスツリーの1つのルートを表示または報告します)。ウィンドウマネージャのプロセスIDが1234であるとし、以下を実行します。ps fpstree

lsof -p1234

ファイル記述子1と2に対応する行を検索するか、

または

ls -l /proc/1234/fd

関連ファイル記述子を自動的にフィルタリングできます。

lsof -p1234 | awk '$4 ~ /^[12][^0-9]/'
ls -l /proc/1234/fd/[12]

(注:上記のすべてのコマンドはLinuxに適用されます。pgrep他のUnixで一般的であり、ほとんどどこにでもlsofインストールできます。psオプションと/proc内容はUnixによって異なります。)

通常、ターミナルエミュレータ(xterm、konsole、gnome-terminalなど)で実行されているシェルでコマンドを実行しますが、クロススクリーンやtmuxを使用するときは実行しません。これにより、端末エミュレータの出力がどこに行くかを簡単に確認できます。 place 、端末エミュレータがシェルの親プロセスであるためです。ターミナルエミュレータが追加の権限で実行されている場合、この方法は機能しません。これは、一部のシステムがターミナルエミュレータがログインしたユーザーのリスト(utmp)に書き込むことを許可する場合です。

lsof -p$PPID
ls -l /proc/$PPID/fd

多くのディストリビューションは、Xセッションの出力を~/.xsession-errors

おすすめ記事