启动和停止分叉进程

时间:2008-12-23 01:49:46

标签: multithreading fork scheduled-tasks

父进程是否可以在Unix中启动和停止子进程(分叉)进程?

我想实现一个任务调度程序(see here),它能够同时运行多个进程,我认为这需要单独的进程或线程。

如何停止执行子进程并在给定时间后恢复它?

(如果这只适用于线程,那么线程是如何实现的?)

3 个答案:

答案 0 :(得分:2)

您可以使用信号编写一个简单的调度程序模拟。 如果您具有权限,则 stop 信号(SIGSTOP)将停止执行进程,并且 continue 信号(SIGCONT)继续执行该操作。

对于信号,你不会对“调度”进行任何精细控制, 但是我觉得操作系统级调度程序不是这种执行的目的。

检查kill(2)和signal(7)手册页。 在网络上使用Unix信号也有很多指南。

答案 1 :(得分:1)

您可以使用信号,但在通常的UNIX世界中,使用信号量可能更容易。一旦你将信号量设置为不让其他进程继续进行,调度程序就会在正常情况下将其交换出来;当你清除信号量时,它就会准备再次运行。

当然,您可以使用线程执行完全相同的操作;唯一显着的区别是你保存了一个重量级的上下文切换。

答案 2 :(得分:0)

只是旁注:如果您使用signal(),则不同的unix上的行为可能会有所不同。如果您使用的是Linux,请查看信号联机帮助页的“可移植性”部分,以及 sigaction 联机帮助页,这是首选。