Чи можна забрати запущену програму з терміналу?


26

Колись мені потрібно запустити додаток з терміналу для налагодження. Якщо я впевнений, що після запуску програми помилка виявиться короткою, я можу запустити цю програму з терміналу.

Однак помилки трапляються несподівано, і тоді мені потрібно лише стежити за програмою баггі з терміналу (щоб побачити його вихід).

Чи можу я потім забрати програму з терміналу, який не запускався за допомогою терміналу? Якщо так, як?


Зрештою, я взяв відповідь Міхала Шражера, тому що це була найбільш повчальна. Але всі ваші відповіді були просто хорошими і оціненими теж. Ура.
Бенджамін

Попередні повідомлення про помилку (в stderr) записуються, ~/.xsession-errorsякщо ви запустили його через GUI.
Лекенштейн

Відповіді:


30

Кожен процес у Linux має спеціальний каталог /proc/{pid}/fd/. 0 - stdin, 1 - stdout, а 2 - stderr. Отже, припускаючи, що вас цікавить лише діагностичний вихід, ви можете визначити pid процесу, а потім у терміналі зробити:

щоб побачити stdout:

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

щоб побачити stderr:

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

Гаразд, я трохи заплутався, коли я запускаю, cat /proc/1840/fd/1здається, повертає вихід з інших процесів, ніж той, який я взяв. (1840 в даний час для Skype згідно System Monitor) Він також показує вихід інших програм ...: |
Бенджамін


6

Ви можете долучитися gdbдо запущеного процесу.

Синтаксис є

gdb program pid

Гаразд, ви не можете побачити вихідний код, якщо інформація про налагодження знімається, що є типовим для розгорнутих програм. Але ви, ймовірно, можете бачити stdout / stderr та налагоджувальні повідомлення, segfault.


Я спробував це, але не вийшло. Наприклад, System Monitor показує, що Cairo-Dock ID - 1452, тому я запускаю gdb program 1452(я також пробував gdb 1452), але він повертає "1452: Такого файлу чи каталогу немає."
Бенджамін

Перший повинен працювати. Що це повернуло?
enzotib

Це те, що він повертається повністю після запиту на 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. Ви також можете шукати "прив’язати tty". В основному це робиться за допомогою, ptraceщоб ви могли навіть розгорнути свій власний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.