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
rootje 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.