亲子流程


22

有人可以告诉我指定nice级别与子进程之间的关系吗?

例如,如果我的默认nice值为0,并且我使用来启动了脚本nice 5,那么该脚本又启动了一些子进程(在这种情况下,并行启动了大约20个子进程),那么子进程的优点是什么?


1
只有root用户才能降低进程的美观程度,并且该值在任何明智的fork实现中均由子进程继承。
jw013

@ jw013-为了清楚起见,我正在编写脚本,&用于生成子进程,而不是使用cfork
新创建2012年

3
除非您使用的是非Unix / Linux操作系统,否则可以肯定地说,您的shell会使用生成后台进程fork
jw013 2012年

Answers:


28

子进程会继承nice父进程在分叉时所拥有的任何值(在您的示例中为5)。

但是,如果nice在分叉子进程之后父进程的值发生了变化,则子进程不会继承新nice值。

您可以使用监视工具轻松地观察到这一点top。如果nice默认情况下未显示(NI)字段,则可以通过按f并选择来添加它I。这会将NI列添加到top显示中。

* I: NI = Nice value

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1937 root      20   0  206m  66m  45m S  6.2  1.7  11:03.67 X                                         

来自的好信息 man 2 fork

fork()通过复制调用过程来创建一个新过程。新进程称为子进程,与调用进程(称为父进程)完全相同,但以下几点除外:

  • 子进程具有其自己的唯一进程ID,并且此PID与任何现有进程组的ID(setpgid(2))不匹配。
  • 子级的父进程ID与父级的进程ID相同。
  • 子级不会继承其父级的内存锁(mlock(2),mlockall(2))。
  • 子进程中的进程资源利用率(getrusage(2))和CPU时间计数器(times(2))被重置为零。
  • 孩子的未决信号集最初是空的(sigpending(2))。
  • 子级不会从其父级继承信号量调整(semop(2))。
  • 子级不会从其父级(fcntl(2))继承记录锁。
  • 子级不会从其父级(setitimer(2),alarm(2),timer_create(2))继承计时器。
  • 子级不会从其父级(aio_read(3),aio_write(3))继承未完成的异步I / O操作,也不会从其父级继承任何异步I / O上下文(请参阅io_setup(2))。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.