端末から実行中のアプリケーションを取得できますか?


26

デバッグのために、ターミナルからアプリケーションを実行する必要がある場合があります。アプリケーションの起動後すぐにバグが発生すると確信している場合は、ターミナルからこのアプリケーションを実行できます。

ただし、バグは予期せずに発生するため、ターミナルからバグのあるアプリケーションを監視するだけで済みます(出力を確認するため)。

その後、ターミナルを使用して起動されなかったアプリケーションをターミナルから取得できますか?もしそうならどのように?


結局、MichałŠrajerの答えが最も有益だったので、私はそれを選びました。しかし、あなたの答えはすべて良かっただけでなく、高く評価されました。乾杯。
ベンジャミン

以前のエラーメッセージ(stderrへ)は~/.xsession-errors、GUIで起動した場合に書き込まれます。
レーケンシュタイン

回答:


30

Linuxの各プロセスには特別なディレクトリがあり/proc/{pid}/fd/ます。0は標準入力、1は標準出力、2は標準エラーです。したがって、診断出力のみに関心があると仮定すると、プロセスpidを決定でき、ターミナルで以下を実行できます。

標準出力を表示するには:

cat /proc/{pid of process}/fd/1

stderrを表示するには:

cat /proc/{pid of process}/fd/2

OK少し混乱しています。実行cat /proc/1840/fd/1すると、選択したプロセス以外のプロセスから出力が返されるようです。(現在、システムモニターによると、1840はSkype用です)他のプログラムの出力も表示されます...:|
ベンジャミン


6

添付できます gdb実行中のプロセスにます。

構文は

gdb program pid

デバッグ情報が取り除かれた場合、デプロイされたアプリケーションのデフォルトであるソースコードは表示できません。ただし、おそらくstdout / stderrおよびデバッガーメッセージ、segfaultsを見ることができます。


試しましたが、うまくいきませんでした。たとえば、システムモニターはCairo-Dock IDが1452であると表示するので、実行しましたgdb program 1452(私も試しましたgdb 1452)が、「1452:No such file or directory。」を返します。-
ベンジャミン

最初のものが動作するはずです。それは何を返しましたか?
エンゾチブ

これは、pid 1840(Skype)を要求した後に完全に返されるものです。– GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... 1840: No such file or directory.
ベンジャミン

私は最初のものは持つことを、言いましたgdb program pid。あなたが示した出力はgdb pid
enzotib

すみません、私の間違いです。`gdbプログラム3385(再びSkype)はこれを返します。
ベンジャミン

5

あなたはおそらく探していrettyます。「attach tty」も検索できます。基本的に使用は完了しているptraceので、自分でロールバックすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.