学习笔记5

最近忙于六级+期末+毕设的一些东西。很久没更新笔记了。东西还是太乱了一点。感觉只是用来安慰自己有在学习而已

##########################################################################
2013-12-20
当一个进程调用fork时,其子进程继承父进程的信号处理方式。
每一个进程都有一个信号屏蔽字,它规定了当前要阻塞到该进程的信号集。对于每种可能的信号,该屏蔽字都有一位与之对应。对于某种信号,若其对应位已设置,则它当前是被阻塞的。进程可以调用sigprocmask来检测和更改其当前信号屏蔽字。

kill和raise函数
kill函数将信号发送给进程和进程组。raise函数则允许进程向自身发送信号。
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid,int signo);
int raise(int signo);
kill的pid参数有四种不同的情况:
pid>0 将信号发送给进程ID为pid的进程。
pid==0 将信号发送给其进程组ID等于发送进程的进程组ID,而且发送进程有许可权向其发送信号的所有进程。(这些进程不包括系统进程集:交换进程(pid 0),init(pid 1)以及页精灵进程(pid 2))。
pid<0 将信号发送给其进程组ID等于pid绝对值,而且发送进程有许可权向其发送信号的所有进程。(此处同上)
pid=-1 未定义。
许可权的基本规则是发送者的实际或有效用户ID必须等于接收者的实际或有效用户ID。许可权的特例是:如果发送的信号是SIGCONT,则进程可将它发送给同一对话期的任一其他进程。
将信号0定义为空信号,此时kill仍然执行正常的错误检查,但不发送信号,这常被用来确定一个特定进程是否仍旧存在,如果向一个并不存在的进程发送空信号,则kill返回-1,errno则被设置成ESRCH。但是UNIX系统在经过一定时间后会重新使用进程ID,所以现存的进程并不一定是原来的进程。

alarm和pause函数
使用alarm函数可以设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当所设置的时间值被超过后,产生SIGALRM信号。如果不忽略此信号,则其默认动作是终止该进程。
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
时间到后,信号由内核产生,会有一定的延时。若以前的设置的闹钟还没到期,则被替换,返回值是剩余时间。若seconds为0,则取消已设闹钟(有的话),返回剩余时间。
pause函数使调用进程挂起直至捕捉到一个信号
#include <unistd.h>
int pause(void);
只有执行了一个信号处理程序并从其返回时,pause才返回。在这种情况下,pause返回-1,errno设置为EINTR。

处理信号集sigset_t数据类型的函数
#include <signal.h>
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set,int signo);
int sigdelset(sigset_t *set,int signo);
int sigismember(const sigset_t *set,int signo);
sigemptyset初始化由set指向的信号集,使排除其中所有信号。函数sigfillset初始化由set指向的信号集,使其包括所有信号。所有应用程序在使用信号集前,要对该信号调用sigemptyset或sigfillset一次。一旦初始化了一个信号集,以后就可以在该信号集中增、删特定的信号。sigaddset函数将一个信号添加到现存集中。sigdelset则从信号集中删除一个信号。sigsmember对特定信号是否在信号集中进行测试。对所有以信号集作为参数的函数都向其传送信号集地址。

sigprocmask函数(用于检测或更改进程的信号屏蔽字)
#include <signal.h>
int sigprocmask(int how,const sigset_t *set,sigset_t *oset);
oset是一个非空指针,进程当前信号屏蔽字通过oset返回。set也是一个非空子针,参数how指示如何修改当前信号屏蔽字。
how的可选值
SIG_BLOCK 该进程新的信号屏蔽字是其当前信号屏蔽字和set指向信号集的并集。set包含了我们希望阻塞的附加信号。
SIG_UNBLOCK 该进程新的信号屏蔽字是当前信号屏蔽字和set所指向信号集的交集。set包含了我们希望解除阻塞的信号。
SIG_SETMASK 该进程新的信号屏蔽是set指向的值
如果set是个空指针,则不改变该进程的信号屏蔽字,how值没意义。
如果在调用sigprocmask后有任何未决的、不再阻塞的信号,则在sigprocmask返回前,至少将其中之一递送给该进程。

##########################################################################
2014-01-20
sigpending函数
#include <signal.h>
int sigpending(sigset_t *set);
sigpending通过set指针返回对于调用进程因为被阻塞不能递送和当前未决的信号集

sigaction函数
#include <signal.h>
int sigaction(int signo,const struct sigaction *act,struct sigaction *oact);
检查和修改(或两者)与指定信号相关联的处理动作。
signo是要检测或修改具体动作的信号的编号数。若act指针非空,则要修改其动作。若oact指针非空,则系统返回该信号的原先动作。使用下面的结构:
struct sigaction
{
 void (*sa_handler)();  //指向一个信号捕捉函数
 sigset_t sa_mask;   //在调用信号捕捉函数前加到信号屏蔽字的信号集(自动包括正被递送的信号)
 int sa_flags;     //包括对信号进行处理的各个选项,列表见P224
}

signal_intr函数,signal函数的另一个版本,它阻止被中断的系统调用再启动(略)

sigsetjmp和siglongjmp函数
为了避免在信号捕捉函数里使用longjmp导致该信号不能从屏蔽状态恢复,提供了这两个函数
#include <setjmp.h>
int sigsetjmp(sigjmp_buf env,int savemask);
void siglongjmp(sigjmp_buf env,int val);
这两个函数相对于setjmp和longjmp之间的唯一区别是sigsetjmp增加了一个参数,如果savemask非0,则sigsetjmp在env中保存进程的当前信号屏蔽字,当调用siglongjmp时,如果带非0 savemask的sigsetjmp调用已经保存了env,则siglongjmp从其中恢复保存的信号屏蔽字。

sigsuspend函数
#include <signal.h>
功能:恢复信号屏蔽字,然后使进程睡眠。
int sigsuspend(const sigset_t sigmask);
进程的信号屏蔽字设置为由sigmask指向的值,在捕捉到一个信号或发生了一个会终止该进程的信号之前,该进程也被挂起。如果捕捉到一个信号而且从该信号处理程序返回,则sigsuspend返回,并且该进程的信号屏蔽字设置为调用sigsuspend之前的值。此函数总是返回-1,并且errno设置为EINTR(表示一个被中断的系统调用)。

深度学习笔记v5是一本关于深度学习学习资料,下面我将用300字来回答有关这本笔记的内容。 深度学习是机器学习领域的一个重要分支,它主要研究模拟人脑神经网络的算法和模型,用于实现复杂的学习任务。深度学习在图像识别、语音识别和自然语言处理等领域取得了很多重要的突破,成为了人工智能领域的热点研究方向。 深度学习笔记v5中,首先介绍了深度学习的基本概念和原理。笔记详细解释了神经网络结构、前向传播、反向传播以及梯度下降等基本概念和算法。这些内容帮助读者理解深度学习的基本原理和工作机制。 接着,笔记介绍了常用的深度学习框架,如TensorFlow和PyTorch。这些框架提供了丰富的工具和函数,使得深度学习的开发变得更加简单和高效。笔记详细介绍了如何使用这些框架进行模型训练和评估。 此外,笔记还包含了一些深度学习的经典应用案例。这些案例涵盖了图像分类、目标检测、语音识别等多个领域。通过这些案例,读者可以深入了解深度学习在实际问题中的应用,并学习如何利用深度学习解决现实世界中的复杂任务。 最后,笔记还提供了大量的代码示例和练习题,帮助读者巩固所学的知识。通过实践,读者可以更好地理解深度学习的原理和应用。 总而言之,深度学习笔记v5是一本系统而全面的学习资料,适合对深度学习感兴趣的读者。通过阅读这本笔记,读者可以了解深度学习的基本概念和原理,掌握常用的深度学习框架,以及应用深度学习解决实际问题的方法。希望这本笔记能够对读者在深度学习领域的学习和研究有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值