Похоже, xargs читает входные строки из стандартного ввода, даже если он уже запускает максимальное количество процессов, которые он может запустить.
Вот пример:
#!/bin/bash
function xTrigger()
{
for ii in `seq 1 100`; do echo $ii; sleep 2; done
}
function xRunner()
{
sleep 10;
echo $1;
}
export -f xTrigger
export -f xRunner
bash -c "xTrigger" | xargs -n 1 -P 1 -i bash -c "xRunner {}"
20 секунд после запуска вышеуказанного процесса, I killall xTrigger
, поэтому xargs буферизовал все, что напечатал xTrigger, поэтому xRunner продолжил печатать 1..10. Я хочу, чтобы он печатал только 1,2
Есть ли способ, с помощью которого мы можем изменить это поведение и заставить xargs читать из stdin только тогда, когда он хочет запустить новую команду, так что xTrigger будет ожидать команды echo до тех пор, пока xargs не прочитает из нее? У моего stdin очень динамичный контент, так что это было бы очень полезно.
Попытка придерживаться xargs только потому, что он будет стабильным и изящным. Хотите писать дополнительный код, только если нет простого способа сделать это с помощью xargs.
Спасибо за вашу помощь!