我们知道exec系列函数调用最终调用execve()
这是一个系统调用,剩下的是库函数。因此,通常,对execve()
适用的任何含义也适用于其他exec*()
函数。
我想知道,在执行execve()
期间,所有信号是否被阻塞直到成功,或者是否有办法将信号传递给对应于exec的pid
? (我知道它不会在成功时返回,并且不会进一步执行调用函数)
答案 0 :(得分:4)
我不确定我的问题是否正确,如果我错了,请随时纠正我。
但是,基本上,是的,从流程的角度来看,系统调用可以被视为“原子”。因此,一旦启动www.example.com/example3
系统调用,只有内核可以使用它,并且在运行新命令或失败并显示错误代码或引发execve()
信号之前不会释放该进程(因为SIGKILL
是唯一不可阻挡的信号)。
但是,一旦SIGKILL
产生了一个新进程(并从内核返回),它就可以完全中断任何信号。