Bisakah seseorang mengambil aplikasi yang sedang berjalan dari terminal?


26

Kadang saya perlu menjalankan aplikasi dari terminal untuk debugging. Jika saya yakin bug akan muncul sesaat setelah meluncurkan aplikasi, saya dapat menjalankan aplikasi ini dari Terminal.

Namun, bug terjadi secara tidak terduga, dan hanya saya yang perlu memonitor aplikasi kereta dari Terminal (untuk melihat hasilnya).

Bisakah saya mengambil aplikasi dari terminal, yang tidak diluncurkan menggunakan Terminal? Kalau begitu bagaimana?


Saya akhirnya mengambil jawaban Michał Šrajer karena itu adalah yang paling instruktif. Tetapi semua jawaban Anda hanya baik dan dihargai juga. Tepuk tangan.
Benjamin

Pesan kesalahan sebelumnya (ke stderr) ditulis untuk ~/.xsession-errorsjika Anda meluncurkannya melalui GUI.
Lekensteyn

Jawaban:


30

Setiap proses di linux memiliki direktori khusus /proc/{pid}/fd/. 0 adalah stdin, 1 adalah stdout dan 2 adalah stderr. Jadi, dengan asumsi Anda hanya tertarik pada hasil diagnostik Anda dapat menentukan proses pid, dan kemudian di terminal lakukan:

untuk melihat stdout:

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

untuk melihat stderr:

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

OK saya agak bingung, ketika saya menjalankannya cat /proc/1840/fd/1sepertinya mengembalikan output dari proses lain daripada yang saya ambil. (1840 saat ini untuk Skype menurut System Monitor) Ini menunjukkan output dari program lain juga ...: |
Benjamin


6

Anda dapat melampirkan dengan gdbproses yang sedang berjalan.

Sintaksnya adalah

gdb program pid

Oke, Anda tidak dapat melihat kode sumber, jika informasi debug dilucuti, yang merupakan standar untuk aplikasi yang digunakan. Tetapi Anda mungkin dapat melihat pesan stdout / stderr dan debugger, segfaults.


Saya mencobanya tetapi tidak berhasil. Misalnya Monitor Sistem menunjukkan Cairo-Dock ID adalah 1452, jadi saya menjalankan gdb program 1452(saya juga mencoba gdb 1452), tetapi mengembalikan "1452: Tidak ada file atau direktori."
Benjamin

Yang pertama harus bekerja. Apa yang dikembalikan?
enzotib

Ini adalah apa yang dikembalikan sepenuhnya setelah meminta 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.
Benjamin

Saya mengatakan yang pertama, dengan itu gdb program pid. Saya pikir output yang Anda tunjukkan adalah darigdb pid
enzotib

Maaf, kesalahan saya. Program `gdb 3385 (lagi Skype) mengembalikan ini .
Benjamin

5

Anda mungkin mencari retty. Anda juga bisa mencari "pasang tty". Pada dasarnya itu selesai menggunakan ptracesehingga Anda bahkan bisa menggulung sendiri.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.