Skąd mam wiedzieć, kiedy proces zakończył zapis do pliku?

9

Mam proces, który został spawnowany z powłoki. Działa jako proces w tle i eksportuje DB do pliku CSV w /tmp.

Jak mogę sprawdzić, kiedy proces w tle zakończył się (zakończył / zakończył) lub czy blokada pliku CSV została zamknięta? Planuję przesłać plik do innego hosta po zapisaniu, ale potrzebuję całego pliku, zanim zacznę przesyłanie pliku.

użytkownik34210
źródło
Spraw, by proces jakoś cię poinformował ...
Wyścigi lekkości na orbicie

Odpowiedzi:

7

W systemie Linux plik nie jest zablokowany, nawet gdy program do niego pisze (w przeciwieństwie do systemu Windows).

Aby sprawdzić, czy proces został zakończony, użyj:

while [[ 1 ]]; do
  pgrep dbprocess &>/dev/null

  if [[ $? -eq 0 ]]; then
    echo still running
  else
    echo finished
    # start ftp transfer
  fi
  sleep 2
done

Aby sprawdzić, czy proces ma otwarty plik, możesz użyć

  • lsof <file> wyświetli listę procesów, które zostały otwarte <file>

  • ls -l /proc/$(pgrep db-process)/fd wyświetla deskryptory plików otwarte przez proces db-process

Sebastian
źródło
7

Aby to zrobić, możesz użyć waitwbudowanej powłoki.

waitWbudowane po prostu powoduje, że powłoka, aby wstrzymać czekając na tle zadań do wykonania. Możesz przekazać mu określone zadanie, na które trzeba czekać, lub pozwolić mu czekać na wszystkie zadania.

Na przykład:

echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished

Co skutkuje w:

Thu Sep 25 12:06:48 EDT 2014: starting
Thu Sep 25 12:06:48 EDT 2014: do something else
Thu Sep 25 12:06:53 EDT 2014: background job finished
Patrick
źródło