的Unix/Linux:SIGCONT的处理器/ SIGTSTP
问题描述:
我使用的信号目前书面方式程序,我有这样的烦恼:的Unix/Linux:SIGCONT的处理器/ SIGTSTP
如何变更执行程序的状态,停止/运行,而不发送SIGSTOP
/SIGCONT
?
我明白,我需要使用:当前正在运行的进程
void add_to_runqueue (struct task_struct * p)
和
void del_from_runqueue (struct task_struct * p)
,但如何获取结构的task_struct?
另外:如果这是我需要做的(调用这两个函数)。
在此先感谢!
答
这些函数将是内核函数,即OS内部的函数。在编写程序时,需要通过适当的系统调用,例如kill
。
当你有一个程序进程ID(即它的数量),你可以使用
kill(pid, SIGSTOP);
和
kill(pid, SIGCONT);
你不应该使用SIGTSTP
除非你知道自己在做什么。
我知道:)并发送信号对我来说不是问题。进程也必须停止并继续其他进程,所以我想处理这两个信号(由用户通过控制台发送)。简单的继续使用并不能满足我的需求。 – Karol 2011-06-07 09:19:14
你不能处理SIGSTOP,它是具有固定含义的信号之一。你可以通过忽略它(你的程序继续)来处理SIGTSTP,或者清理你的状态,然后发送一个SIGSTOP。 – 2011-06-07 09:58:53
让我澄清一下:它是关于写信号处理程序而不是发送信号。如果用户向我的程序(它是SIGTSTP或SIGCONT)发送一个信号,它应该停止另外两个进程(分叉的系列),然后自行停止或(或继续)。我很清楚特定的信号是做什么的。问题:我使用什么函数,以及如何将task_struct.state字段更改为TASK_RUNNING为TASK_STOPPED或TASK_RUNNING为TASK_STOPPED。我已经学会了很多阅读sched.h,但是我不是英语的母语用户,并且有很多我不知道。对不起,我的英语不好。 – Karol 2011-06-07 13:50:38