GNU/Linux >> Linux Esercitazione >  >> Linux

Demonizzare un processo in shell?

Dall'articolo di Wikipedia sul demone:

In un ambiente Unix, il processo padre di un demone è spesso, ma non sempre, il processo init. Un demone viene solitamente creato o da un processo che esegue il fork di un processo figlio e quindi esce immediatamente, facendo sì che init adotti il ​​processo figlio, oppure dal processo init che avvia direttamente il demone. Inoltre, un demone lanciato da fork ed exit tipicamente deve eseguire altre operazioni, come dissociare il processo da qualsiasi terminale di controllo (tty). Tali procedure sono spesso implementate in varie routine di convenienza come daemon(3) in Unix.

Leggi la manpage di daemon funzione.

L'esecuzione di un comando in background da una shell che esce immediatamente fa sì che il PPID del processo diventi 1. Facile da testare:

# 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

Come puoi vedere, il processo è di proprietà del PID 1, ma è ancora associato a un TTY. Se mi disconnetto da questa shell di login, accedo di nuovo ed eseguo ps di nuovo, il TTY diventa ? .

Leggi qui perché è importante distaccarsi da TTY.

Usando setsid (parte di 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

Penso che non devi nemmeno reindirizzare stdin, stdout e stderr.


Linux
  1. Processo discendenti?

  2. Storia storpiata?

  3. È possibile modificare l'ambiente di un processo genitore in Python?

  4. Qualche modo per eseguire i comandi della shell su Android a livello di codice?

  5. Come ottenere il PID dal processo figlio biforcuto nello script della shell

Cos'è un file .sh?

Ottenere il PID del processo in Shell Script

Creazione di un demone in Linux

Come ottenere il codice di uscita del processo generato nello script di shell atteso?

Perché eseguire un comando shell Linux con "&"?

Un processo può essere eseguito indipendentemente da qualsiasi shell?