我正在运行一个包含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)