我有這個由9個進程組成的多進程程序。一個是產生3個信號產生過程和4個信號處理過程的主要過程。一個是監測過程。現在我已經使用了兩個信號SIGUSR1和SIGUSR2。每個處理程序都可以處理SIGUSR1或SIGUSR2。每當它們收到一個信號時,它們將共享存儲器中SIGUSR1和SIGUSR2信號的計數增加1.由於信號被髮送到進程組,所以監視進程也接收到這些信號。它可以處理這兩個信號,並將其本地信號計數增加1.每當它達到10時,它就會在共享內存中輸出SIGUSR1和SIGUSR2的計數值。多進程信號處理程序中的奇怪結果
我在主程序中有這個選項,它可以運行30秒並終止程序,在這種情況下,我會睡眠(30),然後終止程序。在第二種情況下,它忙於在while循環中等待,計算共享內存中SIGUSR1和SIGUSR2的總數。當它達到100000時,它終止程序。
這裏是我的兩個版本
對於100000第二版本
對於100000信號版本輸出
Initializing the shared memory
End of initializing the shared memory
Registering the signal handlers
End of registering the signal handlers
Registering the monitoring process
Monitor's pid is 6635
End of registering the monitoring process
Registering the signal generators
Interval SIGUSR1 = 5.79953e-05
Interval SIGUSR2 = 8.69632e-05
Count SIGUSR1 = 10
Count SIGUSR2 = 10
Count SSIGUSR1 = 5
Count SSIGUSR2 = 5
Interval SIGUSR1 = 7.64132e-05
Interval SIGUSR2 = 5.72999e-05
Count SIGUSR1 = 16
Count SIGUSR2 = 24
Count SSIGUSR1 = 8
Count SSIGUSR2 = 12
對於30秒的版本
初始化共享輸出內存
End of initializing the shared memory
Registering the signal handlers
End of registering the signal handlers
Registering the monitoring process
Monitor's pid is 6719
End of registering the monitoring process
Registering the signal generators
Inside option 1
Interval SIGUSR1 = 0.000246763
Interval SIGUSR2 = 0.000222743
Count SIGUSR1 = 93
Count SIGUSR2 = 222
Count SSIGUSR1 = 92
Count SSIGUSR2 = 111
Interval SIGUSR1 = 0.000664711
Interval SIGUSR2 = 0.000390577
Count SIGUSR1 = 102
Count SIGUSR2 = 234
Count SSIGUSR1 = 97
Count SSIGUSR2 = 117
爲什麼結果如此滯後於第二種情況。我的意思是當顯示器首次打印輸出時,由處理線程記錄的SIGUSR1和SIGUSR2的計數已經達到了93和222.此外,信號被髮送到進程組。所以每個信號都由兩個處理器和一個監視器處理。在處理程序中只有兩個,因爲四個hander中有兩個處理SIGUSR1,忽略另一個信號,反之亦然。
所以你可以看到什麼錯誤,當我睡覺(30),看到結果。任何見解。我一直試圖調試這幾天但尚未成功。