как мне запустить скрипт bash в его собственной группе процессов

Это замена процесса .

Конечный результат обеих форм, которые вы даете, должен быть в основном одинаковым; разница в том, что

  • как вы указываете, подстановка процессов запускает оба процесса одновременно;
  • ваша вторая форма использует файл в файловой системе, поэтому вам нужно место для его хранения (и, в идеале, удалить его впоследствии ).

Технически ввод-вывод между процессами, включающими подстановку процессов, ведет себя как конвейеры, а не как файлы. (Однако это вполне может быть деталью реализации.)

Правильно -написанные программы не должны иметь различий в своих результатах , поскольку они выполняются одновременно; например,

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

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

1
12.07.2019, 15:05
1 ответ

Попробуйте использовать setsid. Он создает новый сеанс для вашего процесса, что делает его лидером группы процессов.

См. man 1 setsidи man 2 setsid.

0
22.09.2021, 13:10

Теги

Похожие вопросы