Çı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.