#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, порожденных другими родительскими процессами.