父进程是否可以在 Unix 中启动和停止子(分叉)进程?
我想实现一个任务调度程序(见这里),它能够同时运行多个进程,我认为这需要单独的进程或线程。
如何停止子进程的执行并在给定时间后恢复它?
(如果这只能通过线程实现,那么线程是如何实现的?)
父进程是否可以在 Unix 中启动和停止子(分叉)进程?
我想实现一个任务调度程序(见这里),它能够同时运行多个进程,我认为这需要单独的进程或线程。
如何停止子进程的执行并在给定时间后恢复它?
(如果这只能通过线程实现,那么线程是如何实现的?)
您可以使用信号编写一个简单的调度程序模仿。如果您有权限,则停止信号 (SIGSTOP) 会停止进程的执行,并继续信号 (SIGCONT) 继续它。
有了信号,您就不会对“调度”进行任何细粒度的控制,但我猜操作系统级调度程序无论如何都不是这种执行的目的。
检查 kill (2) 和 signal (7) 手册页。在网络上也有许多使用 Unix 信号的指南。
您可以使用信号,但在通常的 UNIX 世界中,使用信号量可能更容易。一旦您将信号量设置为不让其他进程继续进行,调度程序将在正常过程中将其换出;当您清除信号量时,它将准备好再次运行。
当然,你可以用线程做同样的事情;唯一显着的区别是您保存了重量级上下文切换。
附带说明:如果您使用的是 signal(),则在不同的 unix 上行为可能会有所不同。如果您使用的是 Linux,请查看信号手册页的“可移植性”部分和sigaction 手册页,这是首选。