SORU
24 AĞUSTOS 2009, PAZARTESİ


Nasıl zaten çalışan bir sürecin çıktısını yönlendirmek için

Normalde bir komut gibi başlamak istiyorum

longcommand &;

Bir şey gibi yaparak yönlendirebilirsiniz biliyorum

longcommand > /dev/null;

örneğin çıkış kurtulmak için ya

longcommand 2>&1 > output.log

çıkış yakalamak için.

Ama ben bazen unutuyorum ya aslında sonra yakalama yönlendirmek için bir yolu var mı diye soracaktım.

longcommand
ctrl-z
bg 2>&1 > /dev/null

ya da öyle bir şey iletileri terminali üzerinde haşhaş olmadan terminali kullanmaya devam edebilirim.

CEVAP
24 AĞUSTOS 2009, PAZARTESİ


BakınRedirecting Output from a Running Process.

İlk önce komut çalıştırmayı 12* *tek oturumda ve standart girdiden veri dosyasına kopyalanan test. Başka bir oturumda çıktı ben yönlendirin.

Öncelikle sürecin PID) bulun:

$ ps aux | grep cat
rjc 6760 0.0 0.0 1580 376 pts/5 S  15:31 0:00 cat

Şimdi onay dosyası kolları açık vardır:

$ ls -l /proc/6760/fd
total 3
lrwx—— 1 rjc rjc 64 Feb 27 15:32 0 -> /dev/pts/5
l-wx—— 1 rjc rjc 64 Feb 27 15:32 1 -> /tmp/foo1
lrwx—— 1 rjc rjc 64 Feb 27 15:32 2 -> /dev/pts/5

Şimdi GDB:

$ gdb -p 6760 /bin/cat
GNU gdb 6.4.90-debian

[license stuff snipped]

Attaching to program: /bin/cat, process 6760

[snip other stuff that's not interesting now]

(gdb) p close(1)
$1 = 0
(gdb) p creat(“/tmp/foo3″, 0600)
$2 = 1
(gdb) q
The program is running. Quit anyway (and detach it)? (y or n) y
Detaching from program: /bin/cat, process 6760

p komuta GDB yazdırır değeri olan bir ifade, bir anlatım bir işlev çağrısı, bir sistem çağrısı... o Yüzden ben yürütmek close() sistem çağrısı ve doğrudan dosya tanıtıcı 1, sonra ben yürütmek creat() sistem çağrısı açık bir yeni dosya. creat() sonucu önceki dosyayı işlemek yerine, yani 1. Eğer istediğim için aynı dosya için stdout ve stderr ya istesem değiştirmek için bir dosya tanıtıcı ile başka bir sayı sonra ben arayayım dup2() sistem çağrısı elde ettiği sonuç.

Bu örneğin daha az parametre var çünkü open() yerine creat() kullanmayı tercih ettim. C makroları için bayraklar kullanışlı değil gelen GDB (değil C headers) çok isterdim okuyun başlık dosyaları için keşfetmek bu – bu o kadar da zor değil bunu yapmak ama alacak daha fazla zaman. 0600 sahibi sekizli izni okuma/yazma erişimi olan ve grubu ve diğer erişim sahip olduğunu unutmayın. Ayrıca bu parametre için 0 kullanın ve dosya üzerinde chmod daha sonra çalıştırmak için işe yarar.

Bundan sonra sonucu doğrulayın:

ls -l /proc/6760/fd/
total 3
lrwx—— 1 rjc rjc 64 2008-02-27 15:32 0 -> /dev/pts/5
l-wx—— 1 rjc rjc 64 2008-02-27 15:32 1 -> /tmp/foo3 <====
lrwx—— 1 rjc rjc 64 2008-02-27 15:32 2 -> /dev/pts/5

Daha fazla veri dosyası cat sonuçlarına yazarak 25* *eklenmiş.

Eğer orijinal oturumu kapatmak isterseniz her dosya için kolları kapatmak gerekir, kontrol tty yeni bir aygıtı açın ve sonra setsid() Ara.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal TekZoom

    Canal TekZoo

    1 NİSAN 2012
  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010