父进程是否可以在Unix中启动和停止子进程(分叉)进程?
我想实现一个任务调度程序(see here),它能够同时运行多个进程,我认为这需要单独的进程或线程。
如何停止执行子进程并在给定时间后恢复它?
(如果这只适用于线程,那么线程是如何实现的?)
答案 0 :(得分:2)
您可以使用信号编写一个简单的调度程序模拟。 如果您具有权限,则 stop 信号(SIGSTOP)将停止执行进程,并且 continue 信号(SIGCONT)继续执行该操作。
对于信号,你不会对“调度”进行任何精细控制, 但是我觉得操作系统级调度程序不是这种执行的目的。
检查kill(2)和signal(7)手册页。 在网络上使用Unix信号也有很多指南。
答案 1 :(得分:1)
您可以使用信号,但在通常的UNIX世界中,使用信号量可能更容易。一旦你将信号量设置为不让其他进程继续进行,调度程序就会在正常情况下将其交换出来;当你清除信号量时,它就会准备再次运行。
当然,您可以使用线程执行完全相同的操作;唯一显着的区别是你保存了一个重量级的上下文切换。
答案 2 :(得分:0)
只是旁注:如果您使用signal(),则不同的unix上的行为可能会有所不同。如果您使用的是Linux,请查看信号联机帮助页的“可移植性”部分,以及 sigaction 联机帮助页,这是首选。