The BAQ/Memo/Linux C/バックグラウンドで動作させる関数

Japanese English
Nuclear Physics Data Acquisition Orchestra Gallery Memo Diary Link Home
Linux C Fortran Postscript Home

もどる

プログラムをデフォルトでバックグランドジョブ (システムデーモン)として動作させるための関数があります。
この関数を呼ぶようにすると、いちいち起動時に"&" をつける手間が省けます。

#include <unistd.h>

int daemon(int nochdir, int noclose);

引き数 nochdir が 0 の場合、ワーキングディレクトリを '/' になるそうです。
引き数 noclose が 0 の場合、標準入出力とエラーを /dev/null にリダイレクト、ようするに表示しないようにします。表示したい場合は適当に 1 などを入れておけばよいみたいです。


daemon関数を使った例

#include <unistd.h>
#include <stdio.h>
int main(int argc,char *argv[]){
 int i;
 daemon(1,1);
 for(i=0;i<10;i++){
  printf("%d\n",i);
  sleep(1);
 }
 return 0;
}

コンパイルして、'&'をつけないで起動させてもバックグラウンドで動作することが確認できます。

daemonは、forkして、親プロセスをexitさせるのでdaemon関数前、後ではPIDが変わるので注意。
daemonを呼ぶ前にPIDをチェックしても、daemon後にはそのPIDは存在しません。

Last Update: 2008/5/28
Hidetada Baba
baba rarfaxp.riken.jp