一直以来都有一个疑问,就是当fork出子进程的时候,父子进程如何响应键盘IO,
是父子进程同时获得输入,还是各自独立,是个问题。于是写了如下代码测试。
实验结果表明,父子进程的gets互不影响,先执行者将会因为等待gets的输入而阻塞,此时
另一进程的gets将得不到响应。待此进程的gets返回之后,下一进程的gets将会执行。且数
据互不影响。
当输入Ctrl+C时,父子进程“同时”获得signal,而不是仅仅由其中的某一个获得。
猜测:父子进程对键盘的IO是不共享的,但是对于Ctrl+C信号,默认是共享的。
是父子进程同时获得输入,还是各自独立,是个问题。于是写了如下代码测试。
- #include signal.h>
- #include stdio.h>
- #include unistd.h>
- #include sys/types.h>
- void child_ctrl_c( )
- {
- printf("Child Process get signal./n");
- }
- void father_ctrl_c( )
- {
- printf("Father Process get signal./n");
- }
- int main( )
- {
- pid_t f;
- f=fork();
- if(f==0){
- char in[100];
- signal(2, child_ctrl_c);
- gets(in);
- printf("In Child Process: %s/n", in);
- }
- else{
- char in[100];
- signal(2, father_ctrl_c);
- gets(in);
- printf("In Father Process: %s/n", in);
- waitpid(-1, NULL, 0);
- }
- }
实验结果表明,父子进程的gets互不影响,先执行者将会因为等待gets的输入而阻塞,此时
另一进程的gets将得不到响应。待此进程的gets返回之后,下一进程的gets将会执行。且数
据互不影响。
当输入Ctrl+C时,父子进程“同时”获得signal,而不是仅仅由其中的某一个获得。
猜测:父子进程对键盘的IO是不共享的,但是对于Ctrl+C信号,默认是共享的。