- 论坛徽章:
- 0
|
本帖最后由 __harry 于 2014-03-03 08:54 编辑
Hi dudes,
It's just a piece of code from a textbook, which tries to finish a zombie process by capturing SIGCHLD signal. However, when the child process terminates, I got a segmentation fault.
I have no idea of the root cause. Could anybody give me a little hint? /THK
My environment is Debian 7.4.0/gcc 4.7.2
void clean_up_child(int sig_num) {
int status;
wait(&status);
}
int main(int argc, char* argv[]) {
char *arglist[] = {
"ls",
"-l",
"/",
NULL
};
struct sigaction sigchld_action;
memset(&sigchld_action, 0, sizeof(sigaction));
sigchld_action.sa_handler = clean_up_child;
sigaction(SIGCHLD, &sigchld_action, NULL);
pid_t child_pid = fork();
if (0 != child_pid) {
}
else {
execvp("ls", arglist);
}
for (;{}
return 0;
}
harry@debian:~/sandbox/foo$ ./foo
total 84
drwxr-xr-x 2 root root 4096 Feb 20 10:15 bin
drwxr-xr-x 3 root root 4096 Feb 20 10:20 boot
......
lrwxrwxrwx 1 root root 24 Feb 20 09:37 vmlinuz -> boot/vmlinuz-3.2.0-4-486
Segmentation fault |
|