Skip to main content

Bash Subshells e Parallel Processing

Alzate posteriori, come farle correttamente (Giugno 2025)

Alzate posteriori, come farle correttamente (Giugno 2025)
Anonim

Una shell è un'interfaccia di base per l'immissione di comandi su un sistema Linux. Con esso, puoi inserire direttamente un comando o specificare un file (script) che contenga una sequenza di comandi da eseguire. Le conchiglie sono organizzate in una gerarchia e qualsiasi shell può creare una nuova shell. La nuova shell è considerata un processo figlio, una subshell della shell madre che lo crea.

Per impostazione predefinita, una subshell dipende dal suo genitore, nel senso che se il processo genitore termina, termina anche la subshell. Qualsiasi output è passato dalla subshell alla shell genitore.

Come creare una subshell

In uno script di shell Bash, si crea una subshell usando la notazione parentesi:

Nell'esempio, il ciclo while è racchiuso tra parentesi, il che fa sì che venga eseguito in una subshell della shell in cui viene eseguito il file di script.

Esecuzione di una subshell in background

A meno che non si specifichi che la subshell deve essere eseguita in background, la shell genitrice attende che la subshell termini prima di continuare con il resto dello script. Tuttavia, se vuoi eseguire subshells in parallelo, puoi eseguirli in background, cosa che si ottiene con il carattere e commerciale che segue l'espressione subshell, come mostrato qui:

Esecuzione di più sottoscala in parallelo

Se crei più subshell come processi in background, puoi eseguire attività in parallelo. In genere, il sistema operativo utilizza processori o core diversi per ogni processo e sottoprocesso, presupponendo che ci siano almeno tanti processori o core quanti sono i processi. In caso contrario, le attività vengono assegnate agli stessi processori o core. In tal caso, il processore o il core passa continuamente tra le attività assegnate fino al completamento delle attività. Il prossimo esempio ha due sottoprocessi. Il primo conta da 1 a 99 e il secondo da 1000 a 1099.

Usa l'istruzione wait per dire al processo genitore di aspettare che i sottoprocessi finiscano prima di procedere con il resto dello script:

Utilizza per Subshells

Le subshell sono utili quando i comandi devono essere eseguiti in un particolare ambiente o directory. Se ciascun comando viene eseguito in una subshell diversa, non vi è alcun rischio che le impostazioni delle variabili vengano confuse. Al termine, le impostazioni e la directory corrente non devono essere ripristinate, poiché l'ambiente del processo padre non è influenzato da nessuno dei suoi sottoprocessi.

Le sottochiavi possono essere utilizzate nelle definizioni di funzioni in modo che possano essere eseguite più volte con parametri diversi.