Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

disownコマンド

昨日知りましたw
disownはバックグラウンドプロセスをデーモン化するbashの組み込みコマンドで、引数に"%"+ジョブ番号を指定します。
以下、使用例。

$ cat tmp.php
<?php
while (true) {
    sleep(10);
    file_put_contents('/tmp/tmp.php.log', date('YmdHis'). PHP_EOL, FILE_APPEND|FILE_TEXT);
}
$ php tmp.php &
[1] 31993
$ jobs
[1]+  Running                 php tmp.php &
$ disown %1
$ jobs
$

これでターミナルを終了させても大丈夫。
再度ターミナルで繋げて、pstree確認してみると、initプロセスの子プロセスになっているのが分かります。

init(1)─┬─atd(1819)
         :
         ├─mingetty(1916)
         ├─php(31993)
         ├─postmaster(1867)─┬─postmaster(1958)
         :

追記(2009/10/16 11:54)

linuxでバックグラウンド処理を便利にするコマンド+おまけ - 絶品ゆどうふのタレからのTBで良いこと教えてもらいました。
で、試してみたんですが、バックグラウンド実行する際に"&|"を付ければOKとありますが、"&!"のようですでもいけるっぽいです。また、これはzshでの話で、bashでは使えませんでした(ちなみに個人的にはzshは使ってません><)。

$ php tmp.php &!
-bash: syntax error near unexpected token `newline'
$ zsh
% ps axww | grep tmp.php
% php tmp.php &!
% ps axww | grep tmp.php
 5443 pts/0    SN     0:00 php tmp.php
%
% php tmp.php &|
% ps axww | grep tmp.php
 5443 pts/0    SN     0:00 php tmp.php
 6391 pts/0    SN     0:00 php tmp.php
%