GNU/Linux >> Linux Esercitazione >  >> Linux

Perché "ls" richiede un processo separato per l'esecuzione?

Perché ls richiedono un processo separato per la sua esecuzione?
Conosco il motivo per cui comandi come cd non può essere eseguito tramite il meccanismo di fork, ma c'è qualche danno se ls viene eseguito senza fork?

Risposta accettata:

La risposta è più o meno quella ls è un eseguibile esterno. Puoi vedere la sua posizione eseguendo type -p ls .

Perché non è ls integrato nel guscio, quindi? Bene, perché dovrebbe essere? Il compito di una shell non è comprendere tutti i comandi disponibili, ma fornire un ambiente in grado di eseguirli. Alcune shell moderne hanno echo , printf , e simili come builtin, che non tecnicamente devono essere incorporati, ma lo sono per motivi di prestazioni quando vengono eseguiti ripetutamente (principalmente in cicli stretti). Senza renderli integrati, la shell dovrebbe eseguire il fork ed eseguire un nuovo processo per ogni chiamata, il che potrebbe essere estremamente lento.

Per lo meno, eseguendo ls , un eseguibile esterno, richiede l'esecuzione di una delle chiamate di sistema della famiglia exec. Potresti fallo senza biforcare, ma sostituirebbe la shell principale che stai utilizzando. Puoi vedere cosa succede in quell'istanza procedendo come segue:

exec ls; echo "this never gets printed"

Poiché l'immagine di processo della shell è stata sostituita, la shell corrente non è più accessibile dopo aver eseguito questa operazione. Affinché la shell possa continuare a funzionare dopo l'esecuzione di ls, il comando dovrebbe essere integrato nella shell.

Il fork consente la sostituzione di un processo che non è la tua shell principale, il che significa che puoi continuare a eseguire la tua shell in seguito.


Linux
  1. Perché Cd non è un programma?

  2. Perché la sostituzione del processo Bash non funziona con alcuni comandi?

  3. Cosa significa 'cd-'?

  4. Perché popen() invoca una shell per eseguire un processo?

  5. Perché il fork del mio processo fa sì che il file venga letto all'infinito

Perché nessuno usa la vera shell Bourne come /bin/sh?

Perché questa pipeline di shell termina?

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

Perché dovrei creare una partizione separata per /tmp?

Perché SUID è disabilitato per gli script di shell ma non per i file binari?

Perché l'utente "bin" ha bisogno di una shell di login?