我有此代码,我必须使程序块反复等待信号。 我的老师希望我们使用Sigsuspend和口罩代替暂停或睡眠。 我不熟悉sigsuspend或mask,我知道sigsuspend()用mask给定的mask临时替换了调用过程的信号mask,然后挂起该过程,直到传递其信号是要调用信号处理程序的信号为止或终止进程。 但是我该如何实施。

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

unsigned Conta = 0;

void mypause(int sign)
{
    switch (sign)
    {
        case SIGINT:
            printf("You've pressed ctrl-C\n");
            printf("I'm running waiting for a signal...\n");
            Conta++;
            break;

        case SIGQUIT:
            printf("You've pressd ctrl-\\n");
            printf("Number of times you've pressed CTRL-C: %d", Conta); 
            exit(0);
            break;
    }
}

int main()
{
    alarm(3);
    printf("I'm Alive\n");

    signal(SIGINT, mypause);
    signal(SIGQUIT, mypause);
    printf("I'm running, waiting for a signal...\n");
    while (1)
    {
    }

    return (0);
}

===============>>#1 票数:10 已采纳

我有此代码,我必须使程序块反复等待信号。 我的老师希望我们使用Sigsuspend和口罩代替暂停或睡眠。 我不熟悉sigsuspend或mask,我知道sigsuspend()用mask给定的mask临时替换了调用过程的信号mask,然后挂起该过程,直到传递其信号是要调用信号处理程序的信号为止或终止进程。 但是我该如何实施。

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

unsigned Conta = 0;

void mypause(int sign)
{
    switch (sign)
    {
        case SIGINT:
            printf("You've pressed ctrl-C\n");
            printf("I'm running waiting for a signal...\n");
            Conta++;
            break;

        case SIGQUIT:
            printf("You've pressd ctrl-\\n");
            printf("Number of times you've pressed CTRL-C: %d", Conta); 
            exit(0);
            break;
    }
}

int main()
{
    alarm(3);
    printf("I'm Alive\n");

    signal(SIGINT, mypause);
    signal(SIGQUIT, mypause);
    printf("I'm running, waiting for a signal...\n");
    while (1)
    {
    }

    return (0);
}

===============>>#2 票数:9

我有此代码,我必须使程序块反复等待信号。 我的老师希望我们使用Sigsuspend和口罩代替暂停或睡眠。 我不熟悉sigsuspend或mask,我知道sigsuspend()用mask给定的mask临时替换了调用过程的信号mask,然后挂起该过程,直到传递其信号是要调用信号处理程序的信号为止或终止进程。 但是我该如何实施。

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

unsigned Conta = 0;

void mypause(int sign)
{
    switch (sign)
    {
        case SIGINT:
            printf("You've pressed ctrl-C\n");
            printf("I'm running waiting for a signal...\n");
            Conta++;
            break;

        case SIGQUIT:
            printf("You've pressd ctrl-\\n");
            printf("Number of times you've pressed CTRL-C: %d", Conta); 
            exit(0);
            break;
    }
}

int main()
{
    alarm(3);
    printf("I'm Alive\n");

    signal(SIGINT, mypause);
    signal(SIGQUIT, mypause);
    printf("I'm running, waiting for a signal...\n");
    while (1)
    {
    }

    return (0);
}

===============>>#3 票数:1

我有此代码,我必须使程序块反复等待信号。 我的老师希望我们使用Sigsuspend和口罩代替暂停或睡眠。 我不熟悉sigsuspend或mask,我知道sigsuspend()用mask给定的mask临时替换了调用过程的信号mask,然后挂起该过程,直到传递其信号是要调用信号处理程序的信号为止或终止进程。 但是我该如何实施。

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

unsigned Conta = 0;

void mypause(int sign)
{
    switch (sign)
    {
        case SIGINT:
            printf("You've pressed ctrl-C\n");
            printf("I'm running waiting for a signal...\n");
            Conta++;
            break;

        case SIGQUIT:
            printf("You've pressd ctrl-\\n");
            printf("Number of times you've pressed CTRL-C: %d", Conta); 
            exit(0);
            break;
    }
}

int main()
{
    alarm(3);
    printf("I'm Alive\n");

    signal(SIGINT, mypause);
    signal(SIGQUIT, mypause);
    printf("I'm running, waiting for a signal...\n");
    while (1)
    {
    }

    return (0);
}

  ask by Luis Quesado translate from so

未解决问题?本站智能推荐:

1回复

在进程间通信中使用pause()和sigsuspend()

假设有两个进程,父进程和子进程,它们使用信号进行同步。 在父进程中,用于与子进程同步的函数的行为如下所示。 我的问题是我们可以使用pause()来替换sigsuspend(&zeromask)吗?
1回复

需要解释sigsuspend

我需要澄清sigsuspend主题。 我有一个简化的例子 以下是我对此的理解: sigemptyset清除信号列表(掩码) - 因为它是用当前阻塞的信号初始化的(?) sigaddset将SIGRTMIN + 1添加到掩码中 sigprocmask设置要阻止掩码+旧掩
1回复

sigsuspend()不会对信号做出反应

我的目标是相互沟通主要流程及其“叉子”儿童。 通过信号传递完成通信。 当第一个孩子在等待SIGUSR1信号时等待等待时出现我的问题。 我不知道为什么它会卡在那一点上。 如果我通过控制台发送信号,那么这个子进程似乎没有引起注意。 有人能帮助我吗? 这是代码
1回复

Sigsuspend系统调用问题

在这种情况下,仅当传递SIGUSR2时,我的线程才会唤醒。 但是,似乎还有其他一些因素迫使sigsuspend返回,但是我不知道是什么,因为所有其他信号都被屏蔽了。 此代码段中有任何问题吗? 非常感谢你
1回复

为什么sigwait()MT安全但sigsuspend()不是?

我正在寻找一个多线程应用程序,其中一个线程在继续之前等待另一个线程发出信号。 根据这里 ,由于竞争条件, sigsuspend不是MT安全的。 根据这里 ,在这些情况下应该使用sigwait 。 我想知道为什么。 基于手册页描述( sigwait和sigsuspend ),它似乎..
3回复

sigsuspend与处理程序执行期间传递的其他信号

sigsuspend更改信号掩码,暂停执行调用线程,直到它收到“其动作是执行信号捕获函数或终止进程的信号”,然后(如果进程未终止且信号处理程序返回) )将信号掩码恢复到其原始状态。 POSIX.1-2008的链接页面没有说明是否可以在一次调用sigsuspend传递多个信号,也没有说明信号
1回复

控制台允许在sigsuspend中输入到stdin

长话短说,我有两个来自同一可执行文件的进程。 它们旨在彼此通信并在这些过程之前为用户创建聊天。 称它们为p1,p2; p1将更快地输入或输入初始详细信息(例如名称),因此它必须等到p2执行相同的操作。 在这里,我将p1置于sigsuspend中,直到它接收到p2也准备就绪的信号。
1回复

Sigsuspend相当于原子系列的sigprocmask,pause,sigprocmask?

我正在阅读关于Linux x86-64系统的信号/ ECF的教科书章节(CS:APP,第3版,第8章,第781页),并且遇到了这个: sigsuspend函数暂时用掩码替换当前阻塞集,然后暂停该进程,直到收到其操作要么运行处理程序或终止进程的信号。 如果操作要终止,则进程终止而不从s
1回复

使用或不使用-fpic

我的应用程序需要在运行时加载一个或多个算法,我使用.so。 问题是这些库不被任何其他进程使用,而是我的应用程序,所以不需要与其他人共享.text部分。 .so的某些部分来自我之前编译的其他静态库。 在这种情况下,我是否仍然必须为静态文件使用-fpic标志? 编辑 我找到了这
4回复

使用条件

先生,请您告诉我,为什么“ C ”中的以下条件为false ?