の* nixでCを使用して非同期プロセスの起動しますプロセスは、親プロセスに戻って、親プロセスと親プロセスとの親プロセスになる)を生成し、<Some code>
ブロック終了後、end()
関数はkill
となり、start()
に関連付けられたプロセスIDになります。 これを行う方法がわかりません。特に、親子コードブロックを非同期にする部分があります。助けが要る。ありがとう。は、私はこのような状況がある
編集:メンバーからの助けを得た後、私はこのコードを書くことができましたが、これは問題を抱えています。誰かがエラーを指摘できれば素晴らしいかもしれません。私が_do_()
に欲しいのは、_stop_()
がそれを殺すことができない場合、決して終了できない子プロセスを開始することだけです。しかし何らかの理由で親プロセスが失われており、ループがwhile()
のループで無期限に実行されます。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
pid_t id = 0;
int _do_()
{
//int status;
pid_t childpid; /* variable to store the child's pid */
FILE *fp= NULL;
childpid = fork();
//child stuff
if (childpid == 0)
{
id = getpid();
fp = fopen ("Log.txt", "w+");
while (1)
{
fprintf(fp, "Logging info...\n");
fflush(fp);
}
fclose(fp);
}
if (childpid < 0) /* fork returns -1 on failure */
{
perror("fork"); /* display error message */
exit(-1);
}
return 0;
}
//kill child process in _do_()
int _stop_()
{
int en;
printf("Going to kill child ID: %d\n", id);
if (kill (id , SIGKILL) < 0)
{
en = errno;
printf("Error while trying to KILL process: %s\n", strerror(en));
}
printf("Logging ended\n");
return 0;
}
int main(int argc, char* argv[])
{
int i;
_do_();
for (i = 0; i < 200; i++)
;
_stop_();
printf("\nEnded...\n");
return 0;
}
EDIT2:私は私が望んで行うことができませんでした、プロセスを殺すが、end()
からstart()
で開始代わりにデーモンプロセスを開始し、それはいくつかのあらかじめ指定された制限値に達したファイルサイズまでのファイル上の値をダンプしてみましょう。これは私が望むものに最も近いものです。
どのオペレーティングシステムこのような何か? –
[これは質問です](http://stackoverflow.com/q/7794273/960195) - 'start'を実装するコードが含まれており、' end'のコードを要求しています。 –
Linuxシステム... – Sayan