私は子プロセスに3回信号を送る必要があります。ゾンビ状態を避けて何回か子供に信号を送るには? C言語
問題は、子供が信号を1回受信してからゾンビに変換することです。
予想される出力は次のようになります。
私は子供の11385だと私は私が子供の11385だと私は私が子供の11385と私だSIGUSR1
を受けSIGUSR1
を受けSIGUSR1
を受けた。しかし、実際の出力は、次のとおりです。
私は子供の11385だと私はSIGUSR1
01を受信#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
void my_handler()
{
printf("\n I'm the child %i and i received SIGUSR1\n", getpid());
}
int main (int argc, char **argv) {
int *array;
int N = 10;
int i;
pid_t pid1;
array=(int*)malloc(sizeof(int)*N);
signal(SIGUSR1,my_handler);
for (i = 0; i< N; i++)
{
pid1 = fork();
if(pid1 < 0)
{
exit(EXIT_FAILURE);
}
else if (pid1 > 0)
{
array[i]= pid1;
}
else
{
sleep(100);
exit(EXIT_SUCCESS);
}
}
i=0;
while(i<3) // I need to call the son 3 times
{
kill(array[1], SIGUSR1);
i++;
}
}
'無効my_handler()' - >> '無効my_handler(int型シグナム)' [間違った署名を使用すると、シグナルハンドラからの復帰が効果的にあなたの子供を殺す]そしてまた:あなたはシグナルハンドラの中からprintf()を呼び出すべきではありません。 – wildplasser
@wildplasserコードは特定のシグナルの例であるため、引数はありません。 printfも例であり、実際の問題ではありません:/ –
しかし、引数を指定して**呼び出されてスタックを破壊します(返品時) – wildplasser