发布网友
共2个回答
热心网友
你应该贴上sig_cld的代码,在信号处理函数中输出可能是错误的根源,因为这些IO函数大多是不可重入的,或许没有将你希望见到的东西打出来,但是他们运行了。你应该找更保险的方法来验证信号处理函数运行了。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<errno.h>
static pid_t pid = 0;
static void sig_cld(int signo) {
while(!(pid=waitpid(-1, NULL, WNOHANG)));
}
int main (int argc, char* argv[]) {
pid_t local_pid = 0;
struct sigaction newact, oldact;
newact.sa_handler = sig_cld;
sigemptyset(&newact.sa_mask);
sigaddset(&newact.sa_mask, SIGCHLD);
newact.sa_flags = 0;
sigaction(SIGCHLD, &newact, &oldact);
if((local_pid = fork()) < 0) {
perror("Fork error!");
exit(1);
} else if (local_pid == 0) {
// child
fprintf(stderr,"child pid : %d\n", getpid());
sleep(2);
exit(0);
} else {
while(!pid)
sleep(1);
fprintf(stderr,"child ends : %d\n", pid);
}
exit(0);
}
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
int main(int argc, char* argv[]) {
if(execl("./main", "main", (char*)0) < 0) {
perror("execl error!");
exit(1);
}
exit(0);
}
以上代码运行完全如预料,没有问题。
热心网友
真想帮你,但不会!
热心网友
你应该贴上sig_cld的代码,在信号处理函数中输出可能是错误的根源,因为这些IO函数大多是不可重入的,或许没有将你希望见到的东西打出来,但是他们运行了。你应该找更保险的方法来验证信号处理函数运行了。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<errno.h>
static pid_t pid = 0;
static void sig_cld(int signo) {
while(!(pid=waitpid(-1, NULL, WNOHANG)));
}
int main (int argc, char* argv[]) {
pid_t local_pid = 0;
struct sigaction newact, oldact;
newact.sa_handler = sig_cld;
sigemptyset(&newact.sa_mask);
sigaddset(&newact.sa_mask, SIGCHLD);
newact.sa_flags = 0;
sigaction(SIGCHLD, &newact, &oldact);
if((local_pid = fork()) < 0) {
perror("Fork error!");
exit(1);
} else if (local_pid == 0) {
// child
fprintf(stderr,"child pid : %d\n", getpid());
sleep(2);
exit(0);
} else {
while(!pid)
sleep(1);
fprintf(stderr,"child ends : %d\n", pid);
}
exit(0);
}
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
int main(int argc, char* argv[]) {
if(execl("./main", "main", (char*)0) < 0) {
perror("execl error!");
exit(1);
}
exit(0);
}
以上代码运行完全如预料,没有问题。
热心网友
真想帮你,但不会!
热心网友
你应该贴上sig_cld的代码,在信号处理函数中输出可能是错误的根源,因为这些IO函数大多是不可重入的,或许没有将你希望见到的东西打出来,但是他们运行了。你应该找更保险的方法来验证信号处理函数运行了。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<errno.h>
static pid_t pid = 0;
static void sig_cld(int signo) {
while(!(pid=waitpid(-1, NULL, WNOHANG)));
}
int main (int argc, char* argv[]) {
pid_t local_pid = 0;
struct sigaction newact, oldact;
newact.sa_handler = sig_cld;
sigemptyset(&newact.sa_mask);
sigaddset(&newact.sa_mask, SIGCHLD);
newact.sa_flags = 0;
sigaction(SIGCHLD, &newact, &oldact);
if((local_pid = fork()) < 0) {
perror("Fork error!");
exit(1);
} else if (local_pid == 0) {
// child
fprintf(stderr,"child pid : %d\n", getpid());
sleep(2);
exit(0);
} else {
while(!pid)
sleep(1);
fprintf(stderr,"child ends : %d\n", pid);
}
exit(0);
}
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
int main(int argc, char* argv[]) {
if(execl("./main", "main", (char*)0) < 0) {
perror("execl error!");
exit(1);
}
exit(0);
}
以上代码运行完全如预料,没有问题。
热心网友
真想帮你,但不会!
热心网友
你应该贴上sig_cld的代码,在信号处理函数中输出可能是错误的根源,因为这些IO函数大多是不可重入的,或许没有将你希望见到的东西打出来,但是他们运行了。你应该找更保险的方法来验证信号处理函数运行了。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<errno.h>
static pid_t pid = 0;
static void sig_cld(int signo) {
while(!(pid=waitpid(-1, NULL, WNOHANG)));
}
int main (int argc, char* argv[]) {
pid_t local_pid = 0;
struct sigaction newact, oldact;
newact.sa_handler = sig_cld;
sigemptyset(&newact.sa_mask);
sigaddset(&newact.sa_mask, SIGCHLD);
newact.sa_flags = 0;
sigaction(SIGCHLD, &newact, &oldact);
if((local_pid = fork()) < 0) {
perror("Fork error!");
exit(1);
} else if (local_pid == 0) {
// child
fprintf(stderr,"child pid : %d\n", getpid());
sleep(2);
exit(0);
} else {
while(!pid)
sleep(1);
fprintf(stderr,"child ends : %d\n", pid);
}
exit(0);
}
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
int main(int argc, char* argv[]) {
if(execl("./main", "main", (char*)0) < 0) {
perror("execl error!");
exit(1);
}
exit(0);
}
以上代码运行完全如预料,没有问题。
热心网友
真想帮你,但不会!