2013-03-08 50 views
0
bash: $: yes a 
[some output] then press Ctrl+Z 
     $: yes b 
[some output] then press Ctrl+Z 

然後,做兩次BG,並得到一些輸出:猛砸 '是一個' 和 '是b'

abbbaaaabaaaabbabaaaa abaaabaabaa ......一個 BBBBBBBB等

爲什麼和b互換如此隨便?

+0

你期望什麼結果? – Kent 2013-03-08 17:18:34

+0

'ababababababababa'? – HazardousWish 2013-03-08 17:22:15

回答

3

這必須做process scheduling,這是一個相當複雜的話題。

我對這個主題不太瞭解,不清楚它爲什麼是隨機的,但足以說Linux內核正在決定每個進程獲得多少CPU時間,並且基於還有多少其他進程正在運行他們究竟在做什麼,它會發生巨大的變化。

+0

我注意到,當我嘗試在控制檯中鍵入任何字符或移動鼠標時,交換會改變:D – HazardousWish 2013-03-08 17:26:40

+0

IIRC像鍵盤和鼠標I/O這樣的事物是最高優先級,而用戶級進程通常具有相對較低的優先級。例如,運行'yes&>/dev/null&'並在'top'中查看它會顯示優先級20(最低)。 – adamdunson 2013-03-08 17:34:33

+0

thx for anwser:3 – HazardousWish 2013-03-08 18:21:00

0

因爲兩個進程都在同時運行? 這不是你所期望的嗎?

+0

可能是,但爲什麼不'ababababababababa'? – HazardousWish 2013-03-08 17:18:56

+0

我想這取決於每個進程何時獲得CPU時間,以及它保存多長時間(與其他輸出緩衝區等相結合)... – 2013-03-08 17:20:02

+0

競爭條件和不準確定時器? – HazardousWish 2013-03-08 17:20:59

0

順便說一句,是通常不會給所有在同一行的字符串,所以我假設你的意思是你想要的: 一個
b
一個
b
一個
b

我想不出任何短的方式來做到這一點與標準UNIX命令比這

awk 'BEGIN{while (1){print "a\nb"}}'