Это замена процесса .
Конечный результат обеих форм, которые вы даете, должен быть в основном одинаковым; разница в том, что
Технически ввод-вывод между процессами, включающими подстановку процессов, ведет себя как конвейеры, а не как файлы. (Однако это вполне может быть деталью реализации.)
Правильно -написанные программы не должны иметь различий в своих результатах , поскольку они выполняются одновременно; например,
tail -n 1 <(seq 1 10000000)
правильно показывает последнее число в последовательности, в то время как попытка сделать это вручную с помощью
seq 1 10000000 > blah &
tail -n 1 blah
завершится ошибкой, потому что tail
показывает последнюю сохраненную строку во время выполнения, а не ждет завершения seq
. Ваша вторая форма правильно ожидает в этом случае.
Однако вы можете увидеть различия во внешнем поведении . Например,
head -n 1 <(seq 1 1000000000)
заканчивается немедленно (даже seq
благодаря поведению трубы ), тогда как
seq 1 1000000000 > blah
head -n 1 blah
выполняется довольно долго. Такое различие может означать, что замена одной формы другой неуместна.
Попробуйте использовать setsid
. Он создает новый сеанс для вашего процесса, что делает его лидером группы процессов.
См. man 1 setsid
и man 2 setsid
.