children没有得到系统调用信号
children do not get the system call signal
父亲根据命令line.The给出的参数分叉出多少children children出生后暂停,父亲通过发送信号唤醒他们。然而,在我写它的方式中,children 似乎从来没有得到唤醒信号。我是否理解 children pids 的概念是错误的,这就是为什么他们从来没有收到信号的原因?
./test 4 5 1 3 2
如上所示 4, 5, .... 代表 child 4, child 5, ...
我连续保存它们,因为它们是从命令行发布到数组中的,用于保存它们的索引(供以后使用...)和它们的 pids 在另一个数组中。我想像命令行中引用的那样连续发送信号(父亲想要)
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include<signal.h>
void handler();
int main(int argc, char **argv){
pid_t proc_pid[argc-1], order[argc-1];
int i;
for(i=0;i<=argc-2;i++){
order[i]=atoi(argv[i+1]);
//printf("%d\n",order[i]);
//printf("%d\n",i);
if((proc_pid[i] = fork()) < 0){
perror("fork");
}
else if(proc_pid[i] == 0){
// proc_pid[i]=getpid();
printf("%d\n",proc_pid[i]);
pause();
signal(SIGINT, handler);
exit(0);
}
else{
kill(proc_pid[i], SIGINT);
//kill(0, SIGINT);
// exit(0);
}
}
return 0;
}
void handler(){
printf("ok\n");
}
父进程和子进程的顺序不确定。
您可以在代码中添加 sleep(1)
让父进程 运行 在子进程之后,如下所示:
...
sleep(1);
kill(proc_pid[i], SIGINT);
//kill(0, SIGINT);
// exit(0);
...
父亲根据命令line.The给出的参数分叉出多少children children出生后暂停,父亲通过发送信号唤醒他们。然而,在我写它的方式中,children 似乎从来没有得到唤醒信号。我是否理解 children pids 的概念是错误的,这就是为什么他们从来没有收到信号的原因?
./test 4 5 1 3 2
如上所示 4, 5, .... 代表 child 4, child 5, ... 我连续保存它们,因为它们是从命令行发布到数组中的,用于保存它们的索引(供以后使用...)和它们的 pids 在另一个数组中。我想像命令行中引用的那样连续发送信号(父亲想要)
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include<signal.h>
void handler();
int main(int argc, char **argv){
pid_t proc_pid[argc-1], order[argc-1];
int i;
for(i=0;i<=argc-2;i++){
order[i]=atoi(argv[i+1]);
//printf("%d\n",order[i]);
//printf("%d\n",i);
if((proc_pid[i] = fork()) < 0){
perror("fork");
}
else if(proc_pid[i] == 0){
// proc_pid[i]=getpid();
printf("%d\n",proc_pid[i]);
pause();
signal(SIGINT, handler);
exit(0);
}
else{
kill(proc_pid[i], SIGINT);
//kill(0, SIGINT);
// exit(0);
}
}
return 0;
}
void handler(){
printf("ok\n");
}
父进程和子进程的顺序不确定。
您可以在代码中添加 sleep(1)
让父进程 运行 在子进程之后,如下所示:
...
sleep(1);
kill(proc_pid[i], SIGINT);
//kill(0, SIGINT);
// exit(0);
...