GNU/Linux >> Linux Esercitazione >  >> Linux

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

In uno script della shell Bash, la e commerciale "&" viene utilizzata per eseguire il fork dei processi:

find -name hello &

Farà in modo che il comando find venga biforcuto ed eseguito in background (puoi sempre terminarlo con il suo PID).


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

Per recuperare immediatamente il tuo prompt ed eseguire il processo in background.

Qual è la loro funzione?

niente consente al processo in background di continuare a funzionare anche dopo che l'utente si è disconnesso (o è uscito dalla shell iniziale).

>& reindirizza sia l'output standard che l'errore standard nel file di registro.

& esegue il tutto in background, restituendoti immediatamente il tuo prompt.

Spiegazione:

Ogni processo Linux apre tre canali I/O, un input "stdin", uno standard output "stdout" e uno standard error output "stderr". Possono essere usati per il binario, ma sono tradizionalmente di testo. Quando la maggior parte dei programmi vede stdin chiuso, escono (questo può essere modificato dal programmatore).

Quando la shell genitore esce, stdin viene chiuso sui figli e (spesso, di solito) anche i figli escono. Inoltre, i bambini ricevono un segnale software, SIGHUP, che indica che l'utente ha "riagganciato" (precedentemente, il modem) e anche qui l'impostazione predefinita è uscire. (Nota, un programmatore può cambiare tutto questo quando scrive il programma).

Quindi, ciò che fa nohup è fornire al processo figlio un ambiente I/O separato, legando i dettagli a qualcosa di non legato alla shell genitore e proteggendo il figlio dal segnale SIGHUP. Una volta che l'utente si disconnette, vedrai il processo in background nohup di proprietà di init (processo 1), non la shell dell'utente.

Comunque nohup non può eseguire completamente il lavoro se il processo viene eseguito in primo piano, quindi & viene utilizzato per eseguire il programma in background, dove può tranquillamente rimanere in esecuzione con o senza che un utente abbia effettuato l'accesso.


Oltre alle risposte di Martin, Ash e Kevin, a volte vedrai una e commerciale usata matematicamente per un AND bit a bit:

$ echo $(( 11 & 7 ))
3

Nel caso in cui non hai familiarità con gli operatori di bit:

11: 1011
 7: 0111
-------- AND
 3: 0011

In ogni posizione c'è un bit nel primo numero E nel secondo numero, imposta quel bit su uno nella risposta.

Per elaborare la risposta di Ash, quando viene utilizzata nel reindirizzamento, la e commerciale può dire alla shell di copiare un descrittore di file. In questo comando echo "hello" > outputfile 2>&1 la e commerciale fa sì che qualsiasi output che può andare in errore standard (stderr, descrittore di file 2) vada nello stesso posto dell'output standard (stdout, descrittore di file 1, il valore predefinito per il lato sinistro di > ). Il >& outputfile operator è una scorciatoia per > outputfile 2>&1 .

Inoltre, novità di Bash 4, ci sono due nuovi terminatori per le clausole nel case comando ;& e ;;& che influenzano se un caso "fallisce" e, in tal caso, se viene eseguito il test successivo.


Linux
  1. Perché mi attengo a xterm

  2. Comando wc Linux con esempi

  3. Comando di ordinamento Linux con esempi

  4. Comando Tee Linux con esempi

  5. Comando JQ in Linux con esempi

Kill Command in Linux

15 Comando Linux ps con esempi

Comando Killall in Linux con esempi

Comando runuser Linux - Esegui Shell con l'ID utente/gruppo specificato

Comando sorgente in Linux

Comando Wait in Linux spiegato con esempi