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