求助吧里的大佬们
c语言吧
全部回复
仅看楼主
level 1
关于进程的问题
原码是这样的,但是实际运行按Ctrl+c后只打印了父进程里面的,也就是parents process is killed
2023年11月27日 10点11分 1
level 1
运行了很多次都是这个结果[不高兴]
2023年11月27日 10点11分 2
level 1
搞不懂,按逻辑来说不应该先执行两个子进程吗[喷]
2023年11月27日 10点11分 3
level 12
你这程序能运行吗?
2023年11月27日 12点11分 5
level 12
第一次见到这样的代码,倒数第⑤行的语句 while(wait....
怎么编译通过的,你使用的编译器是不是特制的?
2023年11月27日 12点11分 6
吧务
level 14
你的代码问题太多
首先最主要的问题是你没有屏蔽SIGINT,所以子进程会接收到SIGINT然后被杀死
其次17是SIGCHLD,发送SIGCHLD又会导致一系列潜在问题,请使用预留给你的SIGUSR1和SIGUSR2
然后你的sighandler的函数原型是错的
以及你在sighandler中修改了非volatile sig_atomic_t类型的变量wait_mark,导致UB
问题太多无力吐槽
2023年11月27日 12点11分 7
以及没有include stdlib.h和sys/wait.h,重定义了stdout变量等等[黑线]
2023年11月27日 12点11分
[乖]感谢吧主
2023年11月27日 13点11分
吧务
level 14
修改后的代码
我不确定给stdout加锁是不是合法的,所以去掉了,没必要
https://pastebin.ubuntu.com/p/CfwnSyFXQh/
2023年11月27日 12点11分 8
[大拇指]
2023年11月27日 14点11分
对于他这个例子不需要对stdout加锁,如果输出很多行,那就需要加锁。
2023年11月27日 14点11分
1