&
— это синтаксис оболочки :оболочка запускает программу в фоновом режиме, а затем следит за ней (например, вы можете использовать wait
, чтобы дождаться завершения фонового процесса ). Поэтому вам нужно использовать оболочку, чтобы это работало, что может быть нежелательно или возможно не во всех случаях.
--daemonize
и подобные опции обрабатываются самой программой (она, вероятно, сделает двойную -вилку и setsid , чтобы отмежеваться от того, что ее запустило ), и поэтому они работают с другими средство запуска программ (форка -и -exec на C, например ).
То, что вы хотите использовать, может зависеть от того, как вы собираетесь запускать программу и в каком состоянии вы хотите, чтобы программа находилась позже.
В качестве необычного примера возьмем sudo
. Если вы хотите запустить команду sudo
в фоновом режиме, но вам нужно пройти аутентификацию, вы не можете указать пароль, если запустите sudo foo bar &
. Один из способов, конечно, состоит в том, чтобы сначала аутентифицироваться с помощью команды ничего не делать -или -v
, а затем полагаться на тайм-аут sudo для запуска фактической команды с помощью &
, не требуя ввода пароля во второй раз. Другой — запустить его на переднем плане, а затем отправить на задний план с помощью CtrlZ и bg
. Тем не менее, sudo
имеет опцию --background
, где он будет работать на переднем плане, запрашивать пароль, а затем демонизировать (, но тогда вы не сможете использовать для него управление заданиями оболочки ).
Имеются и другие побочные эффекты. Например, при запуске программы в фоновом режиме с &
в bash, если управление заданиями не активно (, как по умолчанию в сценариях ), стандартный ввод устанавливается на /dev/null
для нового процесса. С такими параметрами, как --daemonize
, программа сама решает, что делать с унаследованным стандартным вводом.
Я исправил это сегодня самостоятельно, создав диск восстановления Windows 10 с помощью моего ноутбука, а затем загрузив свой компьютер с диска, а затем я ввел следующие команды в командной строке, которая появилась в меню восстановления
bcdedit /export c:\bcdbackup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec.exe /rebuildbcd
И теперь я вернулся со своей Windows 10, и GRUB был удален навсегда:)
PS :Мой ноутбук был HP Pavilion с Windows 10 Home Edition, а мой настольный компьютер (Dell )работал под управлением Windows 10 Enterprise Edition.