У меня есть процесс, который сейчас занимает терминал
]$ command some_argument
Я хочу выйти из терминала и вернуться домой, но пока я не хочу убивать этот запущенный процесс.
Для указанного выше процесса я хочу добиться чего-то вроде следующего:
]$ nohup command some_argument >& logfile &
Отказ от процесса и перенаправление STDOUT из уже подготовленного фонового процесса невозможно для большинства пользователей. Этот ТАК ответ освещает тему довольно хорошо.
Отделить процесс от текущей оболочки не так уж сложно: вы ищете disown
. На странице руководства:
SIGNALS
....
The shell exits by default upon receipt of a SIGHUP. Before exiting,
an interactive shell resends the SIGHUP to all jobs, running or
stopped. Stopped jobs are sent SIGCONT to ensure that they receive the
SIGHUP. To prevent the shell from sending the signal to a particular
job, it should be removed from the jobs table with the disown builtin
(see SHELL BUILTIN COMMANDS below) or marked to not receive SIGHUP
using disown -h.
....
SHELL BUILTIN COMMANDS
....
disown [-ar] [-h] [jobspec ...]
Without options, each jobspec is removed from the table of
active jobs. If jobspec is not present, and neither -a nor -r
is supplied, the shell's notion of the current job is used. If
the -h option is given, each jobspec is not removed from the ta‐
ble, but is marked so that SIGHUP is not sent to the job if the
shell receives a SIGHUP. If no jobspec is present, and neither
the -a nor the -r option is supplied, the current job is used.
If no jobspec is supplied, the -a option means to remove or mark
all jobs; the -r option without a jobspec argument restricts
operation to running jobs. The return value is 0 unless a job‐
spec does not specify a valid job.
Если вы хотите узнать больше о том, nohup
и disown
на самом деле, вы можете проверить этот вопрос. (отказ от ответственности: бессовестная самореклама)
Я понимаю, что в настоящее время вы используете ОС на базе Linux, но для записи и в случае, если кто-то использует Solaris 10 или новее, найдите эту страницу при поиске решения, Solaris nohup
реализует то, что вы ищете:
$ command some_argument
...
^Z[1] + Stopped (SIGTSTP) command some_argument
$ bg
[1] command some_argument&
$ jobs -l
[1] + 1061 Running command some_argument
$ nohup -p 1061
Sending output to nohup.out
$ exit