web-dev-qa-db-ja.com

実行中のプロセスをNohupに変換し、ログファイルを保持する方法

私は現在ターミナルを占有しているプロセスを持っています

]$ command some_argument

ターミナルを出て家に帰りたいのですが、それまでの間、この実行中のプロセスを強制終了したくありません。

上記の実行中のプロセスでは、次のようなことを実現したいと思います。

]$ Nohup command some_argument >& logfile &
2
iamauser

プロセスの所有権を剥奪しおよびすでにバックグラウンド化されたプロセスからSTDOUTをリダイレクトすることは、ほとんどのユーザーにとって実行可能ではありません。 これSO回答 はトピックをかなりうまくカバーしています。

プロセスと現在のシェルの関連付けを解除するのはそれほど難しくありません。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.

Nohupdisownが実際に何をするのかについてもっと知りたい場合は、 this の質問をチェックしてください。 (免責事項:恥知らずな自己宣伝)

5
Andrew B

現在LinuxベースのOSを使用しているとのことですが、記録として、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
0
jlliagre