pid_list = "21232 21231 43432" # same can be put in an array as well
Я запускаю кучу команд в фоновом режиме и получаю их pid с помощью $ i. Как я могу проверить, закончено оно или нет.
Если это единственные процессы, которые вы запустили, вы можете просто использовать wait
, чтобы дождаться их всех.
Я проверяю это условие внутри цикла while, и если все pid завершены, он выйдет, иначе я использую sleep 1m, чтобы подождать минуту ... это будет продолжаться, пока загрузка не будет завершена
Попробуй это:
ps -ef | egrep $(echo $pid_list | sed 's/ /|/g') | grep -v grep | wc -l
Если вывод равен 0, это означает, что процессы завершены.
Есть способ запросить ps
для получения информации о конкретном PID или списке PID.
Это должно помочь в вашем случае. Если эта команда возвращает что-либо, кроме нуля, то по крайней мере один из PID в списке все еще активен / не завершен.
ps -p $(echo ${pid_list} | sed 's/\ /,/g') | tail -n +2 | wc -l
Объяснение:
ps -p
принимает список идентификаторов PID, разделенных запятыми, для которых требуется получить информацию.sed 's/\ /,/g'
заменяет разделители пробелов запятыми.tail -n +2
удаляет первую строку вывода, которая является только заголовками.wc -l
подсчитывает количество возвращаемых строк.
Обратите внимание, что если вы хотите дождаться завершения одного или всех этих pid, то проверка того, завершились ли они, не является правильным подходом.