【问题标题】:Job id in UNIX doubtUNIX 中的作业 id 疑问
【发布时间】:2009-10-02 12:13:42
【问题描述】:

我问了一个相关的问题 'Difference between process group id and job id in Unix', 但我有一个没有回答的疑问。在那个答案中,写作业ID是内置在与shell相关的数据中(内核与它无关),所以前台/后台是对shell的理解,但是当我们执行“ps x”时,它会显示在统计信息中如"R+""R" 分别作为前台和后台进程,但ps 由内核执行,那么内核如何知道该作业是后台/前台。

【问题讨论】:

  • 通常,ps 是一个进程,就像 shell 是一个进程一样。 ps可以获取信息的地方有很多——通常使用/proc文件系统,也可以直接使用/dev/kmem

标签: unix process


【解决方案1】:

作业 ID 绝对是 shell 功能。

但是,操作系统具有当前终端进程组 ID 的概念,shell 也使用它来促进作业控制。与当前终端进程具有相同进程组 ID 的进程接收到 SIGINT 等键盘信号,并能够在终端上进行 I/O。这些进程是前台进程。如果进程组 ID 不同,则该进程是后台进程。当进程在此概念中是前台进程时,ps 命令显示+。它仍然不需要知道关于 shell 实现的作业控制的任何信息。

【讨论】:

  • shell 如何通知内核当前终端进程?它使用 exec 来执行功能。执行此操作还涉及哪些其他例程?
【解决方案2】:

我不会说“内核与它无关”,因为 shell 使用内核中的例程来实现其目的。

shell决定进程是前台还是后台,但是内核也必须知道它,并且可以在shell询问时报告进程的状态。

【讨论】:

  • shell 使用哪些内核例程?
  • 我想我们可以说shell使用了any有用的内核例程。内核可以看作是访问磁盘、显示器、I/O 设备等的例程库。任何时候外壳程序(或任何可执行程序)需要访问硬件,它都会使用内核例程。新硬件可能需要特殊的驱动程序,但新版本的内核会以新例程的形式添加对硬件的支持。
  • 我需要精确的例程,我正在实现自己的shell,请告诉它紧急
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多