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 %