0

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

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

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

(如果这只能通过线程实现,那么线程是如何实现的?)

4

3 回答 3

2

您可以使用信号编写一个简单的调度程序模仿。如果您有权限,则停止信号 (SIGSTOP) 会停止进程的执行,并继续信号 (SIGCONT) 继续它。

有了信号,您就不会对“调度”进行任何细粒度的控制,但我猜操作系统级调度程序无论如何都不是这种执行的目的。

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

于 2008-12-23T02:22:50.483 回答
1

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

当然,你可以用线程做同样的事情;唯一显着的区别是您保存了重量级上下文切换。

于 2008-12-23T02:33:07.187 回答
0

附带说明:如果您使用的是 signal(),则在不同的 unix 上行为可能会有所不同。如果您使用的是 Linux,请查看信号手册页的“可移植性”部分和sigaction 手册页,这是首选。

于 2008-12-23T02:41:21.290 回答