Bir terminalden bir uygulama başlatırsanız stdout ve stderr çıktısını görebilirsiniz, ancak pencere yöneticisinden bir uygulama başlatılırsa, bu dosyalara çıktı genellikle nereye gider? / Dev / null?
~/.xsession-errors
Bir terminalden bir uygulama başlatırsanız stdout ve stderr çıktısını görebilirsiniz, ancak pencere yöneticisinden bir uygulama başlatılırsa, bu dosyalara çıktı genellikle nereye gider? / Dev / null?
~/.xsession-errors
Yanıtlar:
Pencere yöneticisinden başlatılan bir uygulamanın çıktısı, pencere yöneticisinin çıktısıyla aynı yere gider. (Uygulama yönlendirmediği sürece, ancak tipik GUI uygulamaları desteklemez.)
Dosya tanıtıcı 1 (standart çıktı) ve dosya tanıtıcı 2 (standart hata) üzerinde açık olanlara bakarak WM'nin çıktısının nereye gittiğini öğrenebilirsiniz; genellikle her ikisi de aynı dosyaya gider. Pencere yönetici süreci kimliğini bulun (deneyin örneğin pgrep metacityya pidof metacity- Eğer pencere yöneticisi için işlem adını bilmiyorsanız, süreç ağaçlardan birinin kökünde görünüm tarafından bildirilen Metacity sizin pencere yöneticisi ise ps fya pstree). Pencere yöneticinizin işlem kimliğinin 1234 olduğunu varsayalım, çalıştırın
lsof -p1234
ve dosya tanımlayıcıları 1 ve 2'ye karşılık gelen satırları arayın veya
veya
ls -l /proc/1234/fd
İlgili dosya tanımlayıcılarının filtrelenmesini otomatikleştirebilirsiniz:
lsof -p1234 | awk '$4 ~ /^[12][^0-9]/'
ls -l /proc/1234/fd/[12]
(Not: yukarıdaki tüm komutlar Linux içindir. pgrepDiğer unices arasında yaygındır ve lsofhemen hemen her yere kurulabilir; psseçenekler ve /prociçerikler farklı unices arasında farklıdır.)
Bir terminal öykünücüsünde (xterm, konsole, gnome terminali vb.) Çalışan bir kabuktan komut çalıştırdığınız genel durumda (ekran veya tmux arasında kullanıldığında değil), terminal öykünücüsünün çıktısının nerede olduğunu kolayca kontrol edebilirsiniz. Terminal öykünücüsü kabuğunuzun ana işlemi olduğu için gidiyor. Terminal öykünücüsü, bazı sistemlerde terminal öykünücüsünün oturum açmış kullanıcı listesine (utmp) yazmasına izin vermek için gerçekleşen ek ayrıcalıklarla çalışıyorsa bu çalışmaz.
lsof -p$PPID
ls -l /proc/$PPID/fd
Birçok dağıtım X oturumunun çıktısını yönlendirir ~/.xsession-errors.
pidof blackboxveya pgrep blackboxpencere yöneticisinin PID'sini almak için veya doğrudan lsof -p$(pidof blackbox). Ttys'in bununla hiçbir ilgisi yok.
ls -l /proc/<blackbox-id>/fdbana stdout'un gittiğini /dev/nullve stderr'ın gittiğini söylüyor ~/.xsession-errors.
Pencere yöneticisi X sunucusunun çocuğudur, bu yüzden çocuklarının ve çocuklarının çıktıları X sunucusuyla aynı yere gider.
Tek kullanıcı sizseniz ve grafik olarak oturum açarsanız, bazı sistemler X sunucusu örneğini çıkış konsolundan değiştirir, yani bu VT'ye geçebilir ve görebilirsiniz. Anekdot olarak, düzenleme genellikle alt-ctrl-f1X örneği için çıkış konsolu ve alt-ctrl-f7X ekranıdır, ancak bulabildiğiniz kadarını kontrol edebilirsiniz. İlk 6 genellikle giriş yapar, ancak potansiyel olarak boş veya borulu çıktı ile görünmeyen ve görünecek daha fazlası vardır. Bazılarının başlangıcından çıktılar olabilir, bunu X'in çıktısıyla karıştırmayın. Deneyimlerime göre X ve çocuklar her zaman önemli miktarda uyarı ve mesajlar (eksik fontlar, amortismanlı çağrılar, vb.)
Bir GUI ile giriş yapmazsanız, X'i başlattığınız VT ne olursa olsun, bu bir sorun çünkü çıkana kadar görmeyeceksiniz. Bir GUI girişiyle inanıyorum, XDM (grafiksel giriş) ayrıcalıklı bir süreç olarak çalışıyor, yani çıktıyı borulayabiliyor /dev/tty7. startx 1>&2> /dev/tty7Doğru süper kullanıcı ayrıcalıklarına sahipseniz da ( ) yapabilirsiniz .
startxveya xinitdoğrudan bir zaman çimdik ~/.xinitrcyapmadan önce gereken şekilde yönlendirmeleri yapmak execistenen pencere yöneticisi üzerinde. Ben bu tür bir çıkışı hiç kaçırmadım. GUI uygulamasının ne ürettiğiyle ilgileniyorsam, onu terminalden çalıştırıyorum. Ben stdout'u ve stderr'yi yönlendirdim böylece Ama aslında yararlı olabilir ~/.xinitrciçin ~/.xinitrc.out.
Bunu alırsanız, genellikle bir program bir dizi diğerini başlatır man 2 forkve man 2 execvesonra bu süreçte varsayılan olarak dosya tanımlayıcıları açık kalır.
Bu sorunun cevabı, genellikle çıktı / hatanın, ebeveynin süreç çıktısının / hatasının çatal zamanında işaret ettiği yere gitmesidir (ana program elbette bazı yönlendirmeler yapmazsa). Üst programın adını tam olarak bilmedikçe daha spesifik bir şey talep edemeyeceğinizi düşünüyorum. Pencere yöneticisi süreci diğer programların doğrudan başlatılmasında nadiren yer alır.
Örneğin benim durumumda
xmonadpencere yöneticisi tarafından işlenir ) tuşuna basıldığındadmenu_rundmenu_rungirdimi işleyecek ve bazı uygulamaları başlatacak (ör. xkill)Çıkış gidecek /dev/tty1çünkü
xkill tarafından başlatıldı dmenu_rundmenu_run tarafından başlatıldı xmonadxmonad tarafından başlatıldı XX tarafından başlatıldı startxstartx ilk sanal konsoldan manuel olarak başlattım /dev/tty1Yalnızca bir referans için, çıktının / hatanın nereye gittiğini bulmak istiyorsanız veya belirli bir işlem için (bilinen PID ile) açılan dosya tanımlayıcılarının ne olduğunu daha iyi söylemek istiyorsanız,
$ lsof -p PID
ps fauxişlemle ilişkili tty / pts değerlerini kontrol etmek için kullanın . yoksa veya "?" muhtemelen boşlukta kaybolur. (bu sadece bir fikir, yanlış olabilirim)