bash: $: yes a
[some output] then press Ctrl+Z
$: yes b
[some output] then press Ctrl+Z
然後,做兩次BG,並得到一些輸出:猛砸 '是一個' 和 '是b'
abbbaaaabaaaabbabaaaa abaaabaabaa ......一個 BBBBBBBB等
爲什麼和b互換如此隨便?
bash: $: yes a
[some output] then press Ctrl+Z
$: yes b
[some output] then press Ctrl+Z
然後,做兩次BG,並得到一些輸出:猛砸 '是一個' 和 '是b'
abbbaaaabaaaabbabaaaa abaaabaabaa ......一個 BBBBBBBB等
爲什麼和b互換如此隨便?
這必須做process scheduling,這是一個相當複雜的話題。
我對這個主題不太瞭解,不清楚它爲什麼是隨機的,但足以說Linux內核正在決定每個進程獲得多少CPU時間,並且基於還有多少其他進程正在運行他們究竟在做什麼,它會發生巨大的變化。
我注意到,當我嘗試在控制檯中鍵入任何字符或移動鼠標時,交換會改變:D – HazardousWish 2013-03-08 17:26:40
IIRC像鍵盤和鼠標I/O這樣的事物是最高優先級,而用戶級進程通常具有相對較低的優先級。例如,運行'yes&>/dev/null&'並在'top'中查看它會顯示優先級20(最低)。 – adamdunson 2013-03-08 17:34:33
thx for anwser:3 – HazardousWish 2013-03-08 18:21:00
因爲兩個進程都在同時運行? 這不是你所期望的嗎?
可能是,但爲什麼不'ababababababababa'? – HazardousWish 2013-03-08 17:18:56
我想這取決於每個進程何時獲得CPU時間,以及它保存多長時間(與其他輸出緩衝區等相結合)... – 2013-03-08 17:20:02
競爭條件和不準確定時器? – HazardousWish 2013-03-08 17:20:59
順便說一句,是通常不會給所有在同一行的字符串,所以我假設你的意思是你想要的: 一個
b
一個
b
一個
b
我想不出任何短的方式來做到這一點與標準UNIX命令比這
awk 'BEGIN{while (1){print "a\nb"}}'
你期望什麼結果? – Kent 2013-03-08 17:18:34
'ababababababababa'? – HazardousWish 2013-03-08 17:22:15