Puncte:0

Cum să omorâți un script care rulează în fundal, dar obțineți PID-ul scriptului numai atunci când a fost rulat cu un anumit steag

drapel in
Cas

Pot rula mai multe instanțe ale unui script bash în fundal și totul este grozav. Il am configurat in asa fel incat unii au -X ca steag iar unii nu. Vedea:

./test.sh &
./test.sh &
./test.sh -x &
./test.sh -x &

Acum, vreau să opresc toate scripturile care au fost rulate cu -X steag. Opresc întotdeauna scripturile care rulează în fundal folosind asta:

ps -aux | grep -Po "^\S{1,}\s*\K\d*(?=.*test.sh$)" | \
în timp ce citiți nivelul -r
do
   ucide $level
Terminat

In orice caz, ps -aux nu afișează niciun argument/steaguri care au fost date când a fost rulat scriptul. Deci, atunci când folosesc asta, nu pot lua doar scripturile cu care au fost rulate -X. Există o soluție pentru asta? Vreau să opresc doar scripturile de fundal cu care au fost executate -X.

Puncte:1
drapel bd

Încerca

ps -aF | grep -Po "^\S{1,}\s*\K\d*(?=.*test.sh -x$)"
Puncte:1
drapel uz
Jos

Folosește pkill comanda cu -f steag.

Comanda pkill test.sh va ucide toate procesele folosind test.sh ca nume de comandă. Folosind -f steag este explicat în om pgrep, la fel de pgrep și pkill utilizați sintaxă similară:

-f, --plin

În mod normal, modelul se potrivește numai cu numele procesului. Când este setat -f, este utilizată linia de comandă completă.

Cu toate acestea, trebuie să înconjurați modelul de căutare cu ghilimele și să scăpați de - de -X. Asa de pkill -f "test.sh \-x" va ucide doar pe test.sh procesele care rulează cu -X steag.

drapel hr
... sau folosiți indicatorul de sfârșit de opțiuni `--` `pkill -f -- "test.sh -x"` ... puteți folosi și modelul `"test.sh[ \t]+-x „` pentru a permite spații albe orizontale arbitrare
drapel uz
Jos
Un punct bun @steeldriver. Reușesc mereu să uit de `--`.
drapel hr
... când te gândești la asta, este cam ciudat că `pgrep`/`pkill` nu implementează lucrul `-e pattern` pe care grep-ul obișnuit îl are pentru a dezambigua modelul din opțiuni

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.