尼斯和子进程

NWS*_*NWS 26 linux process nice

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

举例来说,如果我有一个默认nice0,我开始用一个脚本nice 5,这反过来又启动一些子进程(在这种情况下,关于平行20),什么是子进程的很好吗?

Geo*_*e M 33

子进程继承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                                         
Run Code Online (Sandbox Code Playgroud)

好资料来自 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))。