Lernu Kiel Agordi Konvene Subtenilojn Uzanta Bash Skriptoj

Kiel Instrui Subtenilojn Kuri en Paralela en la Fono

Ŝelo estas baza interfaco por eniranta komandojn sur Linuksa sistemo. Kun ĝi, vi povas eniri komandon rekte aŭ specifi dosieron (skripton) kiu enhavas sekvencon de komandoj por esti ekzekutitaj. Ŝeloj estas organizitaj en hierarkio, kaj ajna ŝelo povas krei novan ŝelon. La nova ŝelo estas konsiderata infana procezo - subshello de la gepatra ŝelo, kiu kreas ĝin.

Defaŭlte, subshello dependas de ĝia gepatro en la senco, ke se la gepatra procezo finiĝas, la subselo ankaŭ finiĝas. Ajna eligo pasas de la subshello al la gepatra ŝelo.

Kiel Krei Subshellon

En Bash-ŝelo-skripto, vi kreas subshellon uzante la paréntan notacion:

#! / bin / bash echo "Antaŭ komenci subshell" (kalkulo = 1 dum [$ count -le 99] do echo "$ count" sleep 1 ((count ++)) done) echo "Finished"

En la ekzemplo, la tempo-buklo estas ligita en paréntesis, kio kaŭzas ke ĝi estu ekzekutita en subshello de la ŝelo en kiu la skripto-dosiero estas ekzekutita.

Kurante Subtenilon en la Fono

Krom se vi specifas, ke la subaŝelo devas esti ekzekutita en la fono, la gepatra konko atendas ke la subaŝelo finu antaŭ daŭrigi kun ripozo de la skripto. Tamen, se vi deziras kuri sekretojn en paraleleco, vi kuras ilin en la fono, kio plenumas per la karaktero laŭ la subshell-esprimo, kiel ĉi tie montras:

#! / bin / bash echo "Antaŭ komenci subshell" (grafo = 1 dum [$ kalkulo -le 99] faru eĥon "$ count" dormo 1 ((grafo ++)) farita) & eĥo "Finita"

Ruli Multoblajn Eŭskelojn en Paralela

Se vi kreas multajn subaĵojn kiel fonaj procezoj , vi povas kuri taskojn paralele. Tipe, la mastruma sistemo uzas malsamajn procesorojn aŭ kernojn por ĉiu procezo kaj subproceso, supozante ke ekzistas almenaŭ tiom da procesoroj aŭ kernoj kiel ekzistas procezoj. Alie, taskoj estas atribuitaj al la samaj procesoroj aŭ kernoj. En tiu kazo, la procesoro aŭ kerno senĉese ŝaltas inter la atribuitaj taskoj ĝis la taskoj plenumiĝos. La sekva ekzemplo havas du subprocesojn. La unua kalkulas de 1 ĝis 99, kaj la dua unu el 1000 ĝis 1099.

#! / bin / bash echo "Antaŭ komenci subshell" (grafo = 1 dum [$ count -le 99] faras eĥon "$ count" dormo 1 ((grafo ++)) farita) & (kalkuli = 1000 dum [$ kalkulo -le 1099] faras eĥon "$ count" dormo 1 ((grafo ++)) farita) & eĥo "Finita"

Uzu la atendan komunikaĵon por diri al la gepatra procezo atendi ke la subprocesoj finu antaŭ daŭrigi kun la resto de la skripto:

#! / bin / bash echo "Antaŭ komenci subshell" (grafo = 1 dum [$ count -le 99] faras eĥon "$ count" dormo 1 ((grafo ++)) farita) & (kalkuli = 1000 dum [$ kalkulo -le 1099] faras eĥon "$ count" dormo 1 ((grafo ++)) farita) & atendu eĥon "Finita"

Uzoj por kromiloj

Subŝlosiloj estas utilaj kiam ordonoj devas esti ekzekutitaj en aparta medio aŭ dosierujo. Se ĉiu komando estas ekzekutita en alia subaŝelo, ne ekzistas risko, ke variabloj estas miksitaj. Finite, la agordoj kaj la nuna dosierujo ne bezonas esti restarigitaj, ĉar la medio de la gepatra procezo ne tuŝas iujn el ĝiaj subprocesoj.

Subŝlosiloj povas esti uzataj en funkciaj difinoj por ke ili povas esti ekzekutitaj multfoje kun malsamaj parametroj.