sigsuspend()在3个叉子

时间:2018-01-21 17:57:27

标签: c signals fork handler

我正在运行一个包含3个分叉的程序: (阅读/ dev / urandom --- pipe - >一些有趣的东西--- fifo - > stdout)。 我需要写一个sighandler来停止和启动(任意次)所有这些分支。我写过这个......

let img = UIGraphicsGetImageFromCurrentImageContext()
UIImageWriteToSavePhotosAlbum(img!,nil,nil,nil)

我从另一个终端发送信号。 当我键入SIGINT时,它会将SIGUSR1发送到所有3个proccesses。所有这些都是SIGUSR1 static int pid_table[3]; struct sigaction act; sigset_t set1; static void hdl (int sig, siginfo_t *siginfo, void *context) { switch(sig) { int i; case SIGUSR1: sigsuspend(&set1); break; break; case SIGINT: for(i = 0; i<=2; i++) kill(pid_table[i], SIGUSR1); break; case SIGUSR2: for(i = 2; i>=0; i--) kill(pid_table[i], SIGCONT); break; case SIGCONT: break; } } 。 set1是空信号集。

当我输入SIGUSR2时,处理程序应该发送SIGCONT(不知道为什么这个,但我认为没问题)所有这3个proccesses。 SIGCONT的处理程序只是空的(使sigsuspend()返回)。

还有问题。当我键入SIGUSR2时,程序无法启动...我需要发送2个SIGUSR2信号再次启动程序。有谁知道如何避免这第二次发送? (Sry for low english)

0 个答案:

没有答案