爲什麼此代碼不起作用?如果輸入中的數字是偶數,我希望代碼打印figlioA函數的內容,或者如果輸入中的數字是奇數,則代碼將打印另一個代碼內容。哪裏不對?謝謝!C中的信號()不起作用
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
int x;
void figlioA(int segnale) {
if (segnale == SIGUSR1)
printf("x=%d x^3=%d\n", x, (x * x * x));
}
void figlioB(int segnale) {
if (segnale == SIGUSR2)
printf("x=%d reciproco=1/%d\n", x, x);
}
int main(int argc, char * argv[]) {
int pidA, pidB;
int a, b;
x = atoi(argv[1]);
printf("Processo padre ppid=%d pid=%d\n", getppid(), getpid());
pidA = fork();
if (pidA == 0) { // figlio A
printf("figlio A ppid=%d pid=%d\n", getppid(), getpid());
a = getpid();
signal(SIGUSR1, figlioA);
pause();
} else
pidB = fork(); // crea il figlio B
if (pidB == 0) // figlio B
{
printf("figlio B ppid=%d pid=%d\n", getppid(), getpid());
b = getpid();
signal(SIGUSR2, figlioB);
pause();
}
if (pidA != 0 && pidB != 0) {
if (x % 2 == 0) {
kill(a, SIGUSR1);
}
if (x % 2 != 0) {
kill(b, SIGUSR2);
}
}
}
在哪個操作系統上?看起來像Linux!然後閱讀[signal(7)](http://man7.org/linux/man-pages/man7/signal.7.html),注意你不應該在信號處理程序中調用'printf'。 –