Как определить, когда фоновое задание «выполнено»

#bash #unix #parallel-processing #background-process

#bash #unix #параллельная обработка #фоновый процесс

Вопрос:

Допустим, я запускаю следующую команду:

 $ find /mnt/folder1 > file2.csv amp; find /mnt/folder2 > file2.csv amp;
 

Есть ли способ сообщить, когда эти задания выполнены? Или мне нужно опросить что-то вроде $ jobs или $ ps aux , чтобы определить, когда они будут выполнены? Каков предлагаемый способ справиться с этим?

Комментарии:

1. Обычно он выводится на терминал после выполнения задания.

2. Вы могли бы запустить wait … если это то, что вы имеете в виду.

3. @MarkSetchell не могли бы вы показать пример того, как это будет выполняться?

4. Вы просто запускаете кучу параллельных заданий в фоновом режиме, затем запускаете wait и не получаете ответное приглашение, пока все они не будут завершены. Если вы хотите чего-то более сложного, просто скажите, что вам нужно.

Ответ №1:

Комментарий Марка Сетчелла изложен:

 $ find /mnt/folder1 > file2.csv amp;
$ find /mnt/folder2 > file2.csv amp;
$ wait
 

Ответ №2:

Трудно перехватить ваши команды, если у вас нет надежной сущности. В вашем случае вы можете найти PID процесса, например:

 pgrep find
12542
 

он найдет все идентификаторы процессов текущих заданий поиска. Если их нет, вы можете предположить, что задания выполнены.

Комментарии:

1. Вероятно, вам лучше запускать jobs -pas вместо pgrep, чтобы убедиться, что нет дочерних процессов find, порожденных другими родительскими процессами.