Nedaří se příkaz disown: žádné úlohy, ale pořád potomek shellu

Hamparle

  • ****
  • 254
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Když si spustím youtube-dl (v htopu je vidět jako  "/usr/bin/python3 /user/bin/youtube-dl) a běží, je v pozadí, chci ho nechat běžet, tak se mi to nedaří. Příkaz disown jsem dal, jobs, hlásí žádné úlohy.

Ovšem stále v htopu ho vidím jako potomek shellu a když ho zavřu, stahování se přeruší. Čím to? Může být proces imunní k disownutí (to je nějaký signál tomu procesu a on to musí přijmout nebo to jde automaticky?)?

Myslel jsem, že tomu rozumím, s wget mi to jde.
Za další:
 existuje nějaký příkaz kombinující disown a disown - h (již potom, co příkaz byl spuštěn, takže modifikátor nohup na začátku není možnost)?
Pokud to dobře chápu, tak "disown" odstraní  proces z tabulky úloh, ale "disown -h" neodstraní. (o čemž jsem se přesvědčil spuštěním příkaz na pozadí a příkazem disown(-h) a jobs). Ale čekal jsem že parametr -h souvisí s prevencí ukončení (signál HANGUP)

Mám shell bash.



A další otázka:
Může se to celé chovat jinak, když to dělám přes ssh?
« Poslední změna: 08. 11. 2020, 08:02:37 od Petr Krčmář »


k3dAR

  • *****
  • 1 815
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail

Asi bych to spustil ve screen. Je to jednoduchý a k tomu určený nástroj.

Vysvětlení & disown a nohup viz https://unix.stackexchange.com/a/148698

k3dAR

  • *****
  • 1 815
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Asi bych to spustil ve screen. Je to jednoduchý a k tomu určený nástroj.

Vysvětlení & disown a nohup viz https://unix.stackexchange.com/a/148698
screen je opravdu moc jednoduchy, lepsi je tmux a jeste lepsi to byobu ;-)

edit: Byobu je "nadstavba" nad tmux (muze byt i nad screen, ale nad tmux je vhodnejsi a default) a pridam take link na root kterej vysel o 3roky po tom cos daval o screenu ;-)
https://www.root.cz/clanky/byobu-jeste-o-kousek-lepsi-terminal/
« Poslední změna: 08. 11. 2020, 11:58:38 od k3dAR »

 :) No vida.


Na Rootu jsem psal o všech třech: Screen, Byobu, Tmux.

Osobně používám Tmux, automaticky se mi instaluje na všechny stroje ve správě.

Hamparle

  • ****
  • 254
  • junior developer ucho
    • Zobrazit profil
    • E-mail
Inspirace je to zajímavá o tom žádná ,ale opravdu proč to najdnou dělá ty anomálie, že to ten proces furt má rodiče beze změny?

Inspirace je to zajímavá o tom žádná ,ale opravdu proč to najdnou dělá ty anomálie, že to ten proces furt má rodiče beze změny?

Tak rodiče asi změnit nejde, ledaže by byl rodič zabit - pak potomka adoptuje init. Zkuste příkaz pstree. Viz https://unix.stackexchange.com/questions/193902/change-the-parent-process-of-a-process

Citace
The parent process id (ppid) of a process cannot be changed outside of the kernel; there is no setppid system call. The kernel will only change the ppid to (pid) 1 after the processes parent has terminated - if the process did not respond to a signal that the parent was terminated. For this to happen, the process needs to have ignored various signals (SIGHUP, SIGTERM, etc.) beforehand.

Vás spíš zajímá připojení k terminálu (stdin, stdout, sterr, reakce na HUP) a to je popsáno, jak už jsem psal, např. na https://unix.stackexchange.com/a/148698

Citace
screen(1) has a very elegant means of handling detaching and reattaching. When you first start screen, you are actually starting a user interface (ui), which by default will create a daemon (the session manager). This daemon has no terminal associated with it, a new process group (setpgrp(2)), a new session id (setsid(2)). The daemon, running as SCREEN, will then create subprocesses connected to pseudo-terminals (pty), then multiplexes the data from the ptys and the ui (screen). The subprocesses think they are talking with a real terminal.
« Poslední změna: 09. 11. 2020, 23:24:33 od Ondrej Nemecek »