amb*_*air 2 unix shell operating-system process linux-kernel
我想知道操作系统如何优先考虑在Linux中执行后台进程.
假设我有以下命令,它会立即执行,还是OS会优先执行执行顺序.
nohup /bin/bash /tmp/kill_loop.sh &
Run Code Online (Sandbox Code Playgroud)
谢谢
以相同的nice值运行的所有进程将获得相同的cpu-timeslice.
这是一个简单的测试,启动2个进程,都执行完全相同的操作.一个在后台启动,另一个在前台启动.
dd if=/dev/zero of=/dev/null bs=1 &
dd if=/dev/zero of=/dev/null bs=1
Run Code Online (Sandbox Code Playgroud)
随后运行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
Run Code Online (Sandbox Code Playgroud)
接下来,如果两个进程都限制在同一个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
Run Code Online (Sandbox Code Playgroud)
再次从随后运行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
Run Code Online (Sandbox Code Playgroud)
这两个进程都在争夺CPU时间片并且同样优先.
最后,
kill -SIGINT 1357 &
kill -SIGINT 1358 &
kill -SIGINT 1365 &
kill -SIGINT 1366 &
Run Code Online (Sandbox Code Playgroud)
导致相似数量的数据复制和吞吐量.
25129255+0 records in
25129255+0 records out
25129255 bytes (25 MB) copied, 34.883 s, 720 kB/s
Run Code Online (Sandbox Code Playgroud)
由于各个过程响应中断信号并停止运行的确切时刻不同,吞吐量可能会出现输出略有差异.
但是也要注意
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%
Run Code Online (Sandbox Code Playgroud)
(尽管所有3个进程A,B和C都运行在同一个很好的级别.)
归档时间: |
|
查看次数: |
2735 次 |
最近记录: |