2011-06-07 22 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