Lansați un proces de fundal și verificați când se termină

Cum pot lansa un proces în fundal și verificați când se termină într-un script bash? Ideea mea este un script de genul acesta:

launch backgroundprocess & while [ Process is running ];do echo "PROCESS IS RUNNING\r" done; echo "PROCESS TERMINATED" 

Răspuns

Cheia este comanda „wait”:

#!/bin/bash /my/process & /another/process & wait echo "All processes done!" 

Comentarii

Răspuns

Cu wait puteți avea granularitatea de care aveți nevoie:

sleep 1 & PID1=$! sleep 2 & PID2=$! wait $PID1 echo "PID1 has ended." wait echo "All background processes have exited." 

Răspuns

Iată o modalitate de a face acest lucru:

launch backgroundprocess & PROC_ID=$! while kill -0 "$PROC_ID" >/dev/null 2>&1; do echo "PROCESS IS RUNNING" done echo "PROCESS TERMINATED" exit 0 

Comentarii

  • Mulțumesc, acesta este cu siguranță singurul răspuns care răspunde la interpretarea mea a întrebării inițiale (și motivul pentru care am ajuns să mă uit la această întrebare)
  • @cuonglm, Ce există procese multiple? Probabil wait este mai potrivit pentru asta?
  • @cuonglm ce face opțiunea -0 pentru a ucide comanda
  • @k_vishwanath raportează dacă procesul funcționează în continuare sau nu.

Răspuns

Puteți rula procesul cu nohup și puteți scrie script shell pentru a citi fișier nohup.out pe care nohup îl folosește pentru înregistrare.

 nohup command & 

Comentarii

  • (1) La riscul de despicare a firelor de păr, nohup nu ' nu scrie nimic în nohup.out; doar creează fișierul și redirecționează ieșirea comenzii către acesta. (2) Dacă comanda ' nu produce nicio ieșire, nu se va scrie nimic în nohup.out și această idee nu merge nicăieri rapid. (3) Chiar dacă command scrie ieșire, cum puteți spune când se termină monitorizând ieșirea?
  • @ G- Omule poate verificând ieșirea lsof pentru a vedea dacă nohup folosește încă nohup.out, dar sunt de acord că aceasta este o metodă foarte păroasă.
  • (4) Până când command începe să ruleze, nohup a dispărut. (1) Da, repet un număr, pentru că repet ceea ce am spus acum doi ani: nohup nu scrie nimic în nohup.out. (5) Da, ați putea scrie un script de shell care să ruleze și să ruleze lsof pentru a vedea dacă nohup.out este încă deschis. Dar acesta ar fi un răspuns diferit. (6) Chiar dacă ați face acest lucru, nu ar fi de încredere. Ce se întâmplă dacă un alt proces deschide fișierul nohup.out? Doriți cu adevărat să verificați dacă acest proces specific a avut nohup.out deschis. (7) Dar, dacă veți face acest lucru, de ce să nu verificați doar dacă procesul rulează?

Răspuns

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *