0

デーモンプロセスとしてファイルを実行しています。デーモンを停止するにはどうすればよいですか?

int main(int argc, char **argv)
{
    if ( argc != 5 )
    {
        printf ("Usage: %s <server> <nick> <channel> <logging>\n", argv[0]);
        return 1;
    }       
    char *startPath =  malloc(sizeof(char) *100);

strcpy(startPath,"/home/.../start");    

int child_pnr;

if(daemonisieren() != 0) 
{
    printf("damonization not possible");
    exit(0);
}   

printf("I am a damon \n");

 if((child_pnr = fork())==0)
{       
    execve(startPath,argv); 
}
else if (child_pnr > 0)
{   
    printf("I am parent and have a child \n");
    wait(child_pnr);
 }

printf("gone....\n");

free(startPath);
}

私はkill(childnr)と同じようにそれを殺すことができると思いますが、親プロセスは子が実行を終了するのを待つので、彼は決してそうしないかもしれません。どうやってやるの?

4

1 に答える 1

1

さまざまな方法を使用して子のプロセス番号を使用できるようにすることができますが、そのすべてが効果的です。簡単な方法は、システム上のファイルに保存することです。調べて/var/runみると、すでに多くの XXX.pid ファイルが実行されていることがわかるでしょう。

おそらく、ユースケースのより良い解決策は、親で新しいスレッドを開始する (または 2 番目の子をフォークさせる) ことです。このスレッドは、ある程度の時間スリープを実行し、その時間が経過すると、プライマリの子を殺します。プライマリの子が単独で終了し、親の待機を満たす場合、親は「ウォッチドッグ」の子 (またはスレッド) を強制終了できます。

于 2012-09-20T17:20:40.370 に答える