linux 环境中后台进程的优先级是多少
What is the priority of background processes in linux environment
我想知道 OS 如何优先执行 Linux 中的后台进程。
假设我有以下命令,它会立即执行,还是 OS 优先执行顺序。
nohup /bin/bash /tmp/kill_loop.sh &
谢谢
Linux 内核中的进程优先级由 NICE 值 给出。
参考link
http://en.wikipedia.org/wiki/Nice_(Unix)
nice 值(范围在 -20 到 +19 之间)定义进程优先级,-20 是最高优先级任务。通常 user-space 进程被赋予默认的 nice 值“0”。您可以使用以下命令检查 shell 上 运行 进程的 nice 值。
ps -al
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1039 1268 16889 0 80 0 - 11656 poll_s pts/8 00:00:08 vim
0 S 1047 1566 17683 0 80 0 - 2027 wait pts/18 00:00:00 arm-linux-andro
0 R 1047 1567 1566 21 80 0 - 9143 ? pts/18 00:00:00 cc1
0 R 1031 1570 15865 0 80 0 - 2176 - pts/24 00:00:00 ps
0 R 1031 17357 15865 99 80 0 - 2597 - pts/24 00:03:29 top
所以从上面的输出中,如果你看到 'NI' 列显示你的 nice 值。当我尝试 运行 一个后台进程时,它也得到了一个很好的值“0”(顶部是 PID 为 17357 的进程)。这意味着,它也将像前台进程一样排队等待,并同样进行调度。
All processes running at the same nice value will get an equal 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
由于各个进程响应中断信号和停止的确切时间不同,吞吐量可能会出现轻微的差异 运行。
However also note that sched_autogroup_enabled
exists.
如果启用,sched_autogroup_enabled
可确保 cpu-timeslice 的公平分配现在在各个 shell 之间执行。通过在各个活动 shells.
之间平均分配 cpu
因此,如果 shell 启动 1 个进程 A,
另一个 shell 启动了 2 个进程 B 和 C,
那么 CPU 执行时间片通常会分配为
A <-- 50% <---- shell1 50%
B <-- 25% <-.
C <-- 25% <--`- shell2 50%
(尽管所有 3 个进程 A、B 和 C 都 运行 处于相同的 nice 级别。)
我想知道 OS 如何优先执行 Linux 中的后台进程。
假设我有以下命令,它会立即执行,还是 OS 优先执行顺序。
nohup /bin/bash /tmp/kill_loop.sh &
谢谢
Linux 内核中的进程优先级由 NICE 值 给出。 参考link http://en.wikipedia.org/wiki/Nice_(Unix)
nice 值(范围在 -20 到 +19 之间)定义进程优先级,-20 是最高优先级任务。通常 user-space 进程被赋予默认的 nice 值“0”。您可以使用以下命令检查 shell 上 运行 进程的 nice 值。
ps -al
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1039 1268 16889 0 80 0 - 11656 poll_s pts/8 00:00:08 vim
0 S 1047 1566 17683 0 80 0 - 2027 wait pts/18 00:00:00 arm-linux-andro
0 R 1047 1567 1566 21 80 0 - 9143 ? pts/18 00:00:00 cc1
0 R 1031 1570 15865 0 80 0 - 2176 - pts/24 00:00:00 ps
0 R 1031 17357 15865 99 80 0 - 2597 - pts/24 00:03:29 top
所以从上面的输出中,如果你看到 'NI' 列显示你的 nice 值。当我尝试 运行 一个后台进程时,它也得到了一个很好的值“0”(顶部是 PID 为 17357 的进程)。这意味着,它也将像前台进程一样排队等待,并同样进行调度。
All processes running at the same nice value will get an equal 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
由于各个进程响应中断信号和停止的确切时间不同,吞吐量可能会出现轻微的差异 运行。
However also note that
sched_autogroup_enabled
exists.
如果启用,sched_autogroup_enabled
可确保 cpu-timeslice 的公平分配现在在各个 shell 之间执行。通过在各个活动 shells.
因此,如果 shell 启动 1 个进程 A,
另一个 shell 启动了 2 个进程 B 和 C,
那么 CPU 执行时间片通常会分配为
A <-- 50% <---- shell1 50%
B <-- 25% <-.
C <-- 25% <--`- shell2 50%
(尽管所有 3 个进程 A、B 和 C 都 运行 处于相同的 nice 级别。)