系统信号
文章平均质量分 60
linux中信号相关
城市的稻草人VS
这个作者很懒,什么都没留下…
展开
-
【linux 信号学习】信号有关函数
sigsuspend函数会将mask信号集替换进程的信号掩码,然后挂起进程,直到捕获到信号被唤醒(如果捕获的是mask中的信号,则不会被唤醒,继续挂起)、并从信号处理函数返回,一旦从信号处理函数返回,sigsuspend()会将进程的信号掩码恢复成调用前的值。如果进程在执行信号处理函数期间接收到了处在信号掩码中的成员,内核会将其阻塞,将该信号添加到进程等待信号集(等待被处理,处于等待状态的信号)中,可以使用sigpending函数获取正在等待的信号集。并且还允许调用着添加一下输出信息,有参数s指定,原创 2023-06-15 09:40:11 · 125 阅读 · 0 评论 -
【linux 信号学习十一】异常退出
函数 abort()通常产生 SIGABRT 信号来终止调用该函数的进程,SIGABRT 信号的系统默认操作是终止进程运行、并生成核心转储文件;当调用 abort()函数之后,内核会向进程发送 SIGABRT 信号。使用abort()函数终止进程,会生成核心转储文件,可用于判断程序调用abort()时的程序状态。原创 2023-06-14 23:15:26 · 197 阅读 · 0 评论 -
【linux 信号学习十】实时信号
等待信号集只是一个掩码,仅表明一个信号是否发生,而不能表示其发生的次数。换言之,如果一个同一个信号在阻塞状态下产生了多次,那么会将该信号记录在等待信号集中,并在之后仅传递一次(仅当做发生了一次),这是标准信号的缺点之一。函数,也可以使用sa_handler函数,但是这个函数没有办法传递参数。原创 2023-06-14 23:13:54 · 94 阅读 · 0 评论 -
【linux 信号学习九】阻塞和等待信号
sigsuspend函数会将mask信号集替换进程的信号掩码,然后挂起进程,直到捕获到信号被唤醒(如果捕获的是mask中的信号,则不会被唤醒,继续挂起)、并从信号处理函数返回,一旦从信号处理函数返回,sigsuspend()会将进程的信号掩码恢复成调用前的值。如果进程在执行信号处理函数期间接收到了处在信号掩码中的成员,内核会将其阻塞,将该信号添加到进程等待信号集(等待被处理,处于等待状态的信号)中,可以使用sigpending函数获取正在等待的信号集。:获取正在等待处理的信号的集合。原创 2023-06-14 23:09:25 · 221 阅读 · 0 评论 -
【linux 信号学习八】信号掩码
内核为每一个进程维护了一组信号掩码(其实就是一组信号集合)。当进程接收到一个属于信号掩码中的信号时,该信号将会被阻塞,无法传递进程进行处理。内核会将该信号阻塞,直到该信号从信号掩码中删除内核才会把信号传递给进程,从而得到处理。应用程序调用signal()函数或sigaction()函数为某一信号设置处理方式时,会自动将改信号添加到信号掩码中。对于sigaction函数是否会添加和SA_NODEFER标志有关。当信号处理函数结束返回后,信号自动从信号掩码中移除。原创 2023-06-14 23:08:09 · 188 阅读 · 0 评论 -
【linux 信号学习七】获取信号描述信息
linux系统中的每一个信号都有一串与之相对应的字符串描述信息,用于对该信号进行相应的描述。这些字符串位于sys_siglist数组中。sys_siglist数组是一个char * 类型的数组,数组中的每一个元素存放的是一个字符串指针,指向一个信号的描述信息。原创 2023-06-14 23:06:03 · 56 阅读 · 0 评论 -
【linux 信号学习六】信号集
信号集:一个能表示多个信号的数据类型(signal set),很多系统调用都用到了这中数据类型做为参数传递,例如sigaction(),sigprocmask(),sigpending()。:初始化一个自定义信号集,与sigemptyset不同的是,该函数将所有标志位都设置为1,用于快速创建一个包含所有信号的的信号集,然后在根据需求删除不需要的信号。:初始化一个自定义的信号集,也就是将信号集中的所有标志位都置0,使得这个信号集不包含任何信号,不阻塞任何信号。:测试某一个信号是否在信号集中。原创 2023-06-14 22:59:56 · 171 阅读 · 0 评论 -
【linux 信号学习五】 alarm()和pause()函数
2、alarm闹钟并不能循环触发,只能触发一次,若要实现循环触发,可以在SIGALARM信号处理函数中再次调用alarm()函数设置定时器。:可以使得进程暂停运行、进入休眠状态,直到进程捕获一个信号为止,只有执行了信号处理函数并返回时,pause才返回。:设置一个定时器,当定时时间到,内核会向进程发送SIGALRM信号。返回值:-1,并且将errno设置为EINTR。1、每个进程只能设置一个alarm闹钟;原创 2023-06-14 22:55:09 · 203 阅读 · 0 评论 -
【linux 信号学习四】发送信号
在进程中将信号发送给另一个信号是需要权限的,信号的发送者和接收者的实际用户ID或有效用户ID必须相等。raise()相当于kill(getpid(), sig);:将信号发送给指定进程或进程组中的每一个进程。原创 2023-06-14 22:54:43 · 71 阅读 · 0 评论 -
【linux 信号学习三】注册信号
设置信号处理方式,推荐使用,与signal相比,sigaction更具有灵活性和可移植性。给结构体在可以使用man手册查看sigaction()函数帮助信息时,在下面会有介绍。:修改指定信号的行为,也可以用来忽略和恢复默认行为。原创 2023-06-14 22:52:46 · 155 阅读 · 0 评论 -
【linux信号学习二】信号量
终止进程,SIGTERM是一种由操作系统发送给进程的信号,通常用于请求该进程优雅地终止。这个信号的处理方式可以由进程自行定义,但一般来说,进程应该在收到SIGTERM信号后立即停止其正在进行的工作,并释放所有已经占用的资源,如打开的文件、分配的内存等等。SIGTERM信号可以由系统管理员或其他进程发送,例如使用kill命令将信号发送给目标进程。:在一个进程终止或停止时,将SIGCHLD信号发送给其父进程,安系统默认将忽略此信号,如果父进程希望被告知其子系统的状态,则应捕捉词信号。原创 2023-06-14 22:45:56 · 43 阅读 · 0 评论 -
【linux 信号学习一】信号基础
实时信号都支持排队,都是可靠信号,保证了发送多个信号都能被接收,可用于进程。进程,信号通常是发送给对应的进程的,当信号到达后,该进程做出相应的处理。不同系统信号的实际编号可能不同,所以在程序中一般使用信号的名字。新的信号发送函数:sigqueue()、sigaction():有可能会丢失的信号,信号值小于34的信号都是不可靠信号,非实时信号都不支持排队,都是不可靠信号,一般称为标准信号,原创 2023-06-04 16:07:04 · 26 阅读 · 0 评论