Biri çalışan bir uygulamayı terminalden alabilir mi?


26

Bazen hata ayıklama için terminalden bir uygulama çalıştırmam gerekiyor. Uygulamayı başlattıktan kısa bir süre sonra hatanın oluşacağından eminsem, bu uygulamayı Terminal'den çalıştırabilirim.

Ancak, hatalar beklenmedik bir şekilde ortaya çıkıyor ve sonra yalnızca buggy uygulamasını Terminal'den izlemem gerekiyor (çıktısını görmek için).

Terminal kullanarak başlatılmayan terminalden bir başvuru alabilir miyim? Öyleyse nasıl?


Sonunda Michał Šrajer'in cevabını aldım çünkü en öğretici oydu. Ancak tüm cevaplarınız da iyi ve takdir edildi. Şerefe.
Benjamin

~/.xsession-errorsGUI aracılığıyla başlattıysanız , önceki hata mesajları (stderr'e) yazılır .
Lekensteyn 02:11

Yanıtlar:


30

Linux'taki her işlem özel bir dizine sahiptir /proc/{pid}/fd/. 0 stdin, 1 stdout ve 2 stderr'dir. Bu nedenle, yalnızca tanılama çıktısıyla ilgilendiğinizi farz edersek, işlem pidini belirleyebilir ve ardından terminalde:

stdout'u görmek için:

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

stderr'i görmek için:

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

Tamam, kafam biraz karıştı, çalıştırdığımda aldığımdan cat /proc/1840/fd/1başka işlemlerden çıktı alıyor gibi görünüyor. (1840, Sistem Monitörü'ne göre şu anda Skype içindir) Diğer programların da çıktılarını gösteriyor ...: |
Benjamin


6

gdbÇalışan bir işlem ile ekleyebilirsiniz .

Sözdizimi

gdb program pid

Tamam, hata ayıklama bilgileri çıkarılırsa, dağıtılan uygulamalar için varsayılan olan kaynak kodunu göremezsiniz. Fakat muhtemelen stdout / stderr ve debugger mesajlarını ve segfaults mesajlarını görebilirsiniz.


Bunu denedim ama işe yaramadı. Örneğin, Sistem Monitörü, Cairo-Dock ID'nin 1452 olduğunu gösteriyor, bu yüzden kaçtım gdb program 1452(denedim gdb 1452), ancak "1452: Böyle bir dosya veya dizin yok."
Benjamin

İlki çalışmalı. Ne geri döndü?
enzotib 4:11

Bu pid 1840 (Skype) soran sonra tamamen döner şudur: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

İlki dedim, bununla gdb program pid. Sanırım göstermiş olduğunuz çıktıgdb pid
enzotib

Üzgünüm, benim hatam. `gdb programı 3385 (yine Skype) döndüren bu .
Benjamin

5

Muhtemelen arıyorsun retty. Ayrıca "attach tty" ifadesini de arayabilirsiniz. Temelde kendi işini ptracebile yapabilmen için kullanıldı .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.