GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einen Prozess in der Shell dämonisieren?

Aus dem Wikipedia-Artikel über Daemon:

In einer Unix-Umgebung ist der Elternprozess eines Daemons oft, aber nicht immer, der Init-Prozess. Ein Daemon wird normalerweise entweder von einem Prozess erstellt, der einen untergeordneten Prozess verzweigt und dann sofort beendet, wodurch init veranlasst wird, den untergeordneten Prozess zu übernehmen, oder indem der init-Prozess den Daemon direkt startet. Außerdem muss ein durch Forken und Beenden gestarteter Daemon normalerweise andere Operationen ausführen, wie z. B. das Trennen des Prozesses von einem steuernden Terminal (tty). Solche Prozeduren werden oft in verschiedenen praktischen Routinen wie z. B. daemon(3) in Unix implementiert.

Lesen Sie die Manpage von daemon Funktion.

Das Ausführen eines Hintergrundbefehls von einer Shell, die sofort beendet wird, führt dazu, dass die PPID des Prozesses 1 wird. Leicht zu testen:

# 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

Wie Sie sehen können, gehört der Prozess PID 1, ist aber immer noch mit einem TTY verknüpft. Wenn ich mich von dieser Login-Shell abmelde, dann wieder anmelden und ps ausführen wieder wird der TTY zu ? .

Lesen Sie hier, warum es wichtig ist, sich von TTY zu lösen.

Mit setsid (Teil von 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

Ich denke, Sie müssen nicht einmal stdin, stdout und stderr umleiten.


Linux
  1. Nachkommen verarbeiten?

  2. So erhalten Sie die PID von einem gegabelten untergeordneten Prozess im Shell-Skript

  3. Wie erhalte ich den Exit-Code des erzeugten Prozesses im erwarteten Shell-Skript?

  4. Erstellen Sie einen Zombie-Prozess

  5. Ist es möglich, dass ein Daemon-Prozess (d. H. Hintergrund) nach Tastendrücken von einer USB-Tastatur sucht?

JVM-Daemon?

Verstümmelte Geschichte?

Warum erfordert „ls“ einen separaten Prozess zur Ausführung?

Führen Sie das PHP-Skript als Daemon-Prozess aus

Gibt es eine Möglichkeit, Shell-Befehle auf Android programmgesteuert auszuführen?

Was ist eine .sh-Datei?