2011-06-07 21 views
0

我使用的信號目前書面方式程序,我有這樣的煩惱:的Unix/Linux:SIGCONT的處理器/ SIGTSTP

如何變更執行程序的狀態,停止/運行,而不發送SIGSTOP/SIGCONT

我明白,我需要使用:當前正在運行的進程

void add_to_runqueue (struct task_struct * p) 

void del_from_runqueue (struct task_struct * p) 

,但如何獲取結構的task_struct?

另外:如果這是我需要做的(調用這兩個函數)。

在此先感謝!

回答

1

這些函數將是內核函數,即OS內部的函數。在編寫程序時,需要通過適當的系統調用,例如kill

當你有一個程序進程ID(即它的數量),你可以使用

kill(pid, SIGSTOP); 

kill(pid, SIGCONT); 

你不應該使用SIGTSTP除非你知道自己在做什麼。

+0

我知道:)併發送信號對我來說不是問題。進程也必須停止並繼續其他進程,所以我想處理這兩個信號(由用戶通過控制檯發送)。簡單的繼續使用並不能滿足我的需求。 – Karol 2011-06-07 09:19:14

+0

你不能處理SIGSTOP,它是具有固定含義的信號之一。你可以通過忽略它(你的程序繼續)來處理SIGTSTP,或者清理你的狀態,然後發送一個SIGSTOP。 – 2011-06-07 09:58:53

+0

讓我澄清一下:它是關於寫信號處理程序而不是發送信號。如果用戶向我的程序(它是SIGTSTP或SIGCONT)發送一個信號,它應該停止另外兩個進程(分叉的系列),然後自行停止或(或繼續)。我很清楚特定的信號是做什麼的。問題:我使用什麼函數,以及如何將task_struct.state字段更改爲TASK_RUNNING爲TASK_STOPPED或TASK_RUNNING爲TASK_STOPPED。我已經學會了很多閱讀sched.h,但是我不是英語的母語用戶,並且有很多我不知道。對不起,我的英語不好。 – Karol 2011-06-07 13:50:38