amb*_*air 2 unix shell operating-system process linux-kernel
我想知道操作系统如何优先考虑在Linux中执行后台进程.
假设我有以下命令,它会立即执行,还是OS会优先执行执行顺序.
nohup /bin/bash /tmp/kill_loop.sh &
谢谢
以相同的nice值运行的所有进程将获得相同的cpu-timeslice.
这是一个简单的测试,启动2个进程,都执行完全相同的操作.一个在后台启动,另一个在前台启动.
dd if=/dev/zero of=/dev/null bs=1 &
dd if=/dev/zero of=/dev/null bs=1
随后运行top命令的相关提取
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1366 root      20   0  1576  532  436 R  100  0.0   0:30.79 dd
 1365 root      20   0  1576  532  436 R  100  0.0   0:30.79 dd
接下来,如果两个进程都限制在同一个CPU中,
taskset -c 0 dd if=/dev/zero of=/dev/null bs=1 &
taskset -c 0 dd if=/dev/zero of=/dev/null bs=1
再次从随后运行top命令的相关提取显示
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1357 root      20   0  1576  532  436 R   50  0.0   0:38.74 dd
 1358 root      20   0  1576  532  436 R   50  0.0   0:38.74 dd
这两个进程都在争夺CPU时间片并且同样优先.
最后,
kill -SIGINT 1357 &
kill -SIGINT 1358 &
kill -SIGINT 1365 &
kill -SIGINT 1366 &
导致相似数量的数据复制和吞吐量.
25129255+0 records in
25129255+0 records out
25129255 bytes (25 MB) copied, 34.883 s, 720 kB/s
由于各个过程响应中断信号并停止运行的确切时刻不同,吞吐量可能会出现输出略有差异.
但是也要注意
sched_autogroup_enabled存在.
如果启用,则sched_autogroup_enabled确保现在在各个shell之间执行分发cpu-timeslice的公平性.通过在各种活动shell之间平均分配cpu .
因此,如果shell启动1个进程A,
而另一个shell启动2个进程B和C,
则CPU执行时间片通常将分发为
A <-- 50%  <---- shell1 50% 
B <-- 25%  <-. 
C <-- 25%  <--`- shell2 50%
(尽管所有3个进程A,B和C都运行在同一个很好的级别.)