【问题标题】:Starting and stopping a forked process启动和停止分叉进程
【发布时间】:2008-12-23 01:49:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: multithreading fork scheduled-tasks


    【解决方案1】:

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

    使用信号,您将无法对“调度”进行任何细粒度控制, 但我想操作系统级调度程序无论如何都不是这个执行的目的。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-05
          • 2012-01-24
          • 1970-01-01
          • 1970-01-01
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多