Shell, subshell, source, background process, PID == confusion


1

Sto cercando di ragionare sul modo in cui tutte queste cose sono messe insieme. Ad esempio con questo script:

#!/bin/bash

. script1
./script2
. script3 &
./script4 &

sleep 5

Come sono i PID? Cos'è un processo separato e cosa no? Il processo in background è lo stesso di una subshell?


Sembra che ti sia dimenticato di chiedere informazioni source script5 ed era quello che stavo cercando. Oppure potresti voler rimuovere 'fonte' dal titolo ...
sage

source è uguale ai punti standalone che ho nell'esempio.
Pithikos

Risposte:


1

. script1 - non un processo separato; script1 viene eseguito nel attuale conchiglia. vedere help .

./script2 - proprio come chiamare un comando esterno, avvia un nuovo processo e attende il completamento

. script3 & - sì, un processo separato. Un esempio:

$ cat script3
sleep 300
$ . script3 &
[1] 15136
$ echo $$
15102
$ ps -ef | grep $$
jackman  15102 32659  0 09:43 pts/0    00:00:00 bash
jackman  15136 15102  0 09:44 pts/0    00:00:00 bash
jackman  15157 15102  0 09:44 pts/0    00:00:00 ps -ef
jackman  15158 15102  0 09:44 pts/0    00:00:00 grep --color=auto 15102

Vedi il manuale di bash, Elenchi di comandi :

Se un comando viene terminato dall'operatore di controllo '& amp;', la shell esegue il comando in modo asincrono in una sottoshell.

./script4 & - sì, un processo separato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.