Çıktısını, PID'sini kullanarak herhangi bir işlemden okumak mümkün müdür?


32

fgKomutu işler için kullanmaya benzer şekilde PID'sini kullanarak zaten çalışmakta olan bir sürece bir terminal bağlamak mümkün müdür ?


ne gibi?! eklemek istediğiniz işlem nedir?

Başka bir terminalde başlatılmış olan bir programın çıktısını görebilmek isterim
Tommy

Yanıtlar:


43

Bu işlemin standart dosya tanımlayıcılarını alabilirsiniz, örneğin stdout:

tail -f /proc/<pid>/fd/1

8
Bu çözümü üst ile denedim ve işe yaramadı. Bir terminalde, üste fırlattım ve bir başkasında emir pidinizde emrinizi kullandım ama çıktı alamadım.
Tommy,

1
Bunu bir mac üzerinde nasıl yaparsınız?
Avner Barr

peki ya stderr? / Proc / <pid> / fd / 2 olduğunu varsayıyorum, fakat o zaman stdout / stderr komutunu nasıl elde edersiniz?
Alexander Mills

1
Ya bu tanımlayıcı bir soketi işaret ederse? Kuyruk okuyamaz. # ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Imaskar, Reinstate Monica’nın

8

Burada birkaç seçenek var. Bunlardan biri komutun çıktısını bir dosyaya yeniden yönlendirmek ve sonra tailo dosyaya gerçek zamanlı olarak eklenen yeni satırları görüntülemek için kullanmaktır .

Başka bir seçenek screende, bir tür metin tabanlı terminal uygulaması olan programınızı başlatmaktır . Ekran oturumları eklenebilir ve çıkarılabilir, ancak nominal olarak yalnızca aynı kullanıcı tarafından kullanılması amaçlanmıştır;

İsterseniz, işlemi izleyebilir ve bununla ne yaptığını görebilirsiniz strace:

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID: PID işlem kimliği ile işleme ekleyin ve izlemeye başlayın.
  • -s SIZE: Yazdırılacak maksimum dize boyutunu belirtin (varsayılan 32'dir).
  • -o filename: İzleme çıktısını, ekran (stderr) yerine dosya dosya adına yazın.

Sonunda işe yaramadı. Üstünü fırlattım ve bir başkasında emirinizi pid ile kullandım ama beklenen çıktıyı alamadım. Daha sonra kuyruk kullandığımda.
Tommy,

sudoBir işleme eklemek için strace ile kullanmanız -o ~/output.txtve dosyayı ana klasörünüzde bırakmak için kullanmanız gerekir .

Çıktı dosyasını kullanın, ekrana göndermeyin! Benim gibi bir salak olma ve strace çıkmak ve PID'imi ayırmak için Ctrl-C tuşlarına bas. Önemli bir senaryoda benden korktum.
Weston Ganger

3

Çalışan bir işlemi başka bir terminale eklemek için aşağıda verilen bu komutları kullanabilirsiniz:

  • retty(Man sayfa: retty )
  • reptyr
  • screen

Örnek:

screen -S PID
retty $(pgrep PID)
reptyr PID

Retty veya reptry bulamadım. Ayrıca, ekranı kullanabilmem için orijinal işlemi başlatmam gerekiyor, böylece sorunumu çözmüyor.
Tommy,

komutu kullanarak yükleyebilirsiniz sudo apt-get install rettyancak retty ile ilgili birkaç sınırlama vardır. Cevapta belirtilen man sayfasına bakınız.
devav2 25:12
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.