В дополнение к nohup
вы можете запустить процесс в фоновом режиме, используя «&» и subshell:
Добавьте к команде команду & и заключите в скобки
$ (thecommand args &)
Допустим, ваш процесс получает pid 1922:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
usr 11473 2643 0 15:07 pts/1 00:00:00 bash
usr 11922 1 0 15:11 pts/1 00:00:00 thecommand
Посмотрите, что он отсоединен от процесса оболочки 11473, который был его первоначальным родителем. Итак, если вы выйдете или убьете текущую оболочку (11473), процесс 11922 продолжит работу, и он будет отключен от точки.
Попробуйте выйти из оболочки и войти в новую оболочку. Даже если эта оболочка подключена к одному и тому же pts, вы можете увидеть процесс без pts:
$ ps -fp 11922
UID PID PPID C STIME TTY TIME CMD
usr 11922 1 0 15:11 ? 00:00:00 thecommand
Я не знаю, как это называется или задокументировано в Posix, но я использую этот способ с 1990 года в bsh, ksh, а теперь в bash.
Наконец, вы можете использовать команду встроенной оболочки bg
:
Просто запустите вашу программу и, если вы решите приостановить ее или планируете сохранить ее в фоновом режиме, нажмите CTRL+Z:
$ thecommand
^Z
[1] Stopped thecommand
Теперь позвольте ему продолжать работать в фоновом режиме:
$ bg
[1]+ thecommand &
Если вы посмотрите на информацию о процессе, у него есть родительский процесс:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
usr 12046 2643 0 15:18 pts/6 00:00:00 bash
usr 12571 12046 0 16:00 pts/6 00:00:00 thecommand
usr 12601 12046 0 16:04 pts/6 00:00:00 ps -f
Итак, выход из текущего процесса. Запущенный процесс в фоновом режиме отсоединяется от своего исходного родителя и продолжает работать в фоновом режиме:
$ exit
Войдите снова и посмотрите информацию о процессе:
$ ps -f 12571
UID PID PPID C STIME TTY TIME CMD
usr 12571 1 0 16:00 ? 00:00:00 thecommand