基本的に、私のプログラムには 4 ~ 5 個の関数があります。多くのコード行とファイルからの読み取りと書き込みであり、無限ループ (最悪の場合) で終了する可能性があり、たとえば 20 秒を超えた場合はプログラムを終了したいと考えています。以下のコードが機能せず、プログラムがハングし、プログラム自体が終了するのではなく、OS が終了します。私が抱えている主な問題は、メインでアラームが設定されており、アラームの制限時間に達すると、プロセスが別の関数で実行されているため、ファイルを閉じたり子プロセスを強制終了したりせずにプログラムがシャットダウンすることです。これは私が今持っているものです:
volatile sig_atomic_t keep_going = 1;
/* The signal handler just clears the flag and re-enables itself. */
void
catch_alarm (int sig)
{
printf("Alarm went off");
exit(EXIT_SUCCESS);
}
void function1
{}
void forkingfunction()
{
or(i=0;i<size;i++,temp++)
{
pid_t pID = vfork();
if (pID == 0) // child
{
printf("\nchild pid %d\n",getpid());
//open some files and read and write
function1();
exit(EXIT_SUCCESS);
kill(pID,SIGKILL);
}
}
else if (pID < 0) // failed to fork
{
perror("Failed to fork:");
}
}
void function2
{
function1();
}
int main()
{
int options
while(options){
switch (options)
{
case 1:
case 2:
}
}
signal (SIGALRM, catch_alarm);
alarm (0.1);//testing for 0.1 seconds
function1();
return 0;
}