GNU/Linux >> Znalost Linux >  >> Linux

Démonizovat proces v shellu?

Z článku na Wikipedii o démonovi:

V prostředí Unix je rodičovským procesem démona často, ale ne vždy, proces init. Démon je obvykle vytvořen buď procesem, který rozvětví podřízený proces a poté se okamžitě ukončí, čímž způsobí, že init adoptuje podřízený proces, nebo proces init přímo spustí démona. Kromě toho musí démon spuštěný rozvětvením a ukončením obvykle provádět další operace, jako je oddělení procesu od libovolného řídicího terminálu (tty). Takové procedury jsou často implementovány v různých pohodlných rutinách, jako je daemon(3) v Unixu.

Přečtěte si manuálovou stránku daemon funkce.

Spuštění příkazu na pozadí z prostředí, které se okamžitě ukončí, má za následek, že se PPID procesu stane 1. Snadné testování:

# bash -c 'nohup sleep 10000 &>/dev/null & jobs -p %1'
1936
# ps -p 1936
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     1936       1    9104       9552  cons0       1009 17:28:12 /usr/bin/sleep

Jak můžete vidět, proces je ve vlastnictví PID 1, ale stále je spojen s TTY. Pokud se odhlásím z tohoto přihlašovacího prostředí, pak se znovu přihlaste a proveďte ps znovu se TTY změní na ? .

Zde si přečtěte, proč je důležité se odpojit od TTY.

Pomocí setsid (část util-linux ):

# bash -c 'cd /; setsid sleep 10000 </dev/null &>/dev/null & jobs -p %1'
9864
# ps -p 9864
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     9864       1    9864       6632  ?           1009 17:40:35 /usr/bin/sleep

Myslím, že ani nemusíte přesměrovat stdin, stdout a stderr.


Linux
  1. Jak získat PID z rozvětveného podřízeného procesu ve skriptu shellu

  2. Jak získat výstupní kód vytvořeného procesu ve skriptu očekávaného shellu?

  3. Vytvořte proces zombie

  1. Proč popen() vyvolá shell k provedení procesu?

  2. Může proces běžet bez ohledu na jakýkoli shell?

  3. Je možné, aby proces démona (tj. pozadí) hledal stisknutí kláves na klávesnici USB?

  1. Jvm Daemon?

  2. Zkažená historie?

  3. Je možné změnit prostředí nadřazeného procesu v Pythonu?