Есть ли разница в запуске процесса в фоновом режиме с & vs, когда у него есть опция --daemonize?

Идея состоит в том, чтобы переместить каталоги с SSD на жесткий диск, а затем смонтировать их в исходное место (автоматически). Например, mv / home / me / bigdata / path / to / hdd-partition и воссоздайте папку как точку монтирования mkdir / home / me / bigdata , затем добавьте строку в / etc / fstab для монтирования / path / to / hdd-partition / bigdata to / home / me / bigdata

Но будьте осторожны: если вы сделаете это с какой-либо папкой, например / usr он может разрушить вашу систему, если монтировать не удастся.

1
11.04.2019, 05:56
1 ответ

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

--daemonizeи подобные опции обрабатываются самой программой (она, вероятно, сделает двойную -вилку и setsid , чтобы отмежеваться от того, что ее запустило ), и поэтому они работают с другими средство запуска программ (форка -и -exec на C, например ).

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

В качестве необычного примера возьмем sudo. Если вы хотите запустить команду sudoв фоновом режиме, но вам нужно пройти аутентификацию, вы не можете указать пароль, если запустите sudo foo bar &. Один из способов, конечно, состоит в том, чтобы сначала аутентифицироваться с помощью команды ничего не делать -или -v, а затем полагаться на тайм-аут sudo для запуска фактической команды с помощью &, не требуя ввода пароля во второй раз. Другой — запустить его на переднем плане, а затем отправить на задний план с помощью CtrlZ и bg. Тем не менее, sudoимеет опцию --background, где он будет работать на переднем плане, запрашивать пароль, а затем демонизировать (, но тогда вы не сможете использовать для него управление заданиями оболочки ).

Имеются и другие побочные эффекты. Например, при запуске программы в фоновом режиме с &в bash, если управление заданиями не активно (, как по умолчанию в сценариях ), стандартный ввод устанавливается на /dev/nullдля нового процесса. С такими параметрами, как --daemonize, программа сама решает, что делать с унаследованным стандартным вводом.

3
27.01.2020, 23:22

Теги

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