尼斯进程和子进程

尼斯进程和子进程

nice有人能告诉我指定级别和子进程之间有什么关系吗?

例如,如果我的默认值为nice0并且我使用 启动一个脚本nice 5,该脚本又启动一些子进程(在本例中大约有 20 个并行进程),那么子进程的优点是什么?

答案1

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

但是,如果nice在 fork 子进程后父进程的值发生更改,则子进程不会继承新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 与任何现有进程组 (setpgid(2)) 的 ID 都不匹配。
  • 子进程的父进程 ID 与父进程 ID 相同。
  • 子级不会继承其父级的内存锁(mlock(2)、mlockall(2))。
  • 子进程中的进程资源利用率 (getrusage(2)) 和 CPU 时间计数器 (times(2)) 重置为零。
  • 子级的待处理信号集最初为空 (sigpending(2))。
  • 子级不会从其父级 (semop(2)) 继承信号量调整。
  • 子级不会从其父级继承记录锁 (fcntl(2))。
  • 子进程不会从其父进程继承计时器(setitimer(2)、alarm(2)、timer_create(2))。
  • 子级不会从其父级继承未完成的异步 I/O 操作(aio_read(3)、aio_write(3)),也不会从其父级继承任何异步 I/O 上下文(请参阅 io_setup(2))。

相关内容