Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix/Linux:SIGCONT/SIGTSTP的处理程序_Unix_Signals_Signal Handling - Fatal编程技术网

Unix/Linux:SIGCONT/SIGTSTP的处理程序

Unix/Linux:SIGCONT/SIGTSTP的处理程序,unix,signals,signal-handling,Unix,Signals,Signal Handling,我目前正在使用信号编写程序,遇到了以下问题: 在不发送SIGSTOP/SIGCONT的情况下,如何将执行程序的状态更改为stopped/running 我理解,我需要使用: void add_to_runqueue (struct task_struct * p) 及 但如何获取当前正在运行的进程的结构任务结构 另外:如果这是我需要做的全部(调用这两个函数) 提前谢谢 这些函数将是内核函数,即操作系统的内部函数。在编写程序时,您需要执行适当的系统调用,例如kill 当您有程序进程ID(即其编

我目前正在使用信号编写程序,遇到了以下问题:

在不发送
SIGSTOP
/
SIGCONT
的情况下,如何将执行程序的状态更改为stopped/running

我理解,我需要使用:

 void add_to_runqueue (struct task_struct * p)

但如何获取当前正在运行的进程的结构任务结构

另外:如果这是我需要做的全部(调用这两个函数)


提前谢谢

这些函数将是内核函数,即操作系统的内部函数。在编写程序时,您需要执行适当的系统调用,例如
kill

当您有程序进程ID(即其编号)时,您可以使用

kill(pid, SIGSTOP);


除非您知道自己在做什么,否则不应该使用
SIGTSTP

I know:)并且发送信号对我来说不是问题。进程还必须停止并继续另一个进程,所以我想处理这两个信号(由用户通过控制台发送)。简单地使用continue并不能满足我的要求。你不能处理SIGSTOP,它是具有固定含义的信号之一。您可以通过忽略SIGTSTP(您的程序继续)或清理您的状态然后向自己发送SIGSTOP来处理SIGTSTP。让我澄清一下:它是关于编写信号处理程序,而不是关于发送信号。如果用户向我的程序发送一个信号(它是SIGTSTP或SIGCONT),它应该停止另外两个进程(这是forked系列),然后停止自己或(或适当地继续)。我很清楚特定信号的作用。问题:我应该使用什么函数,以及如何将task_struct.state字段更改为task_RUNNING到task_STOPPED或task_RUNNING到task_STOPPED。我通过阅读sched.h学到了很多东西,但是我不是一个以英语为母语的用户,还有很多东西我不知道。对不起,我的英语不好。你可以给自己发信号。在处理SIGTSTP时,您将通过SIGTSTP停止子进程,然后将SIGSTOP发送给您自己。对于SIGCONT,您自己的流程不需要特殊处理。还有其他方法吗?正如我以前说过的:信号不能让我满意。
kill(pid, SIGSTOP);
kill(pid, SIGCONT);