Myslím, že zde mám jednodušší řešení. Stačí vyhledat adresář, jehož název odpovídá hledanému PID, v pseudo-souborovém systému přístupném pod /proc
cesta. Pokud tedy máte spuštěný program, jehož ID je 1199, cd
do toho:
$ cd /proc/1199
Poté vyhledejte fd
adresář pod
$ cd fd
Toto fd
adresář obsahuje objekty deskriptorů souborů, které váš program používá (0:stdin, 1:stdout, 2:stderr) a pouze tail -f
ten, který potřebujete – v tomto případě stdout):
$ tail -f 1
Hledal jsem přesně to samé a zjistil jsem, že můžete:
strace -ewrite -p $PID
Není to přesně to, co jste potřebovali, ale je to docela blízko.
Zkoušel jsem výstup přesměrování, ale to mi nefungovalo. Možná proto, že proces zapisoval do soketu, nevím.
Pro mě to fungovalo:
-
Přihlaste se jako vlastník procesu (i
root
je odepřeno oprávnění)~$ su - process_owner
-
Přizpůsobte deskriptor souboru, jak je uvedeno v mnoha dalších odpovědích.
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
Zde je několik možností. Jedním z nich je přesměrovat výstup příkazu do souboru a poté použít 'tail' k zobrazení nových řádků, které jsou přidány do tohoto souboru v reálném čase.
Další možností je spustit váš program uvnitř „obrazovky“, což je druh textové terminálové aplikace. Relace obrazovky mohou být připojeny a odpojeny, ale jsou nominálně určeny pouze pro použití stejným uživatelem, takže pokud je chcete sdílet mezi uživateli, je to velká bolest v zadku.