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);