函数原型 #include <sys/types.h> #include <signal.h> int kill(pid_t pid,int sig); 描述 pid 描述 >0 kill发送信号sig给进程pid 0 kill发送信号给和当前进程在同一进程组的所有进程 -1 信号发送给系统内的所有进程 <-1 kill发送信号sig给进程组-pid中的每个进程 返回值 如果成功完成返回值0 失败
函数原型 #include <signal.h> void psignal(int sig, const char *msg); 描述 打印sig对应信号的描述信息到标准错误流。 参数 sig为信号对应的数。 msg如果不为NULL,那么将msg作为输出消息的前缀。在msg和消息描述之间默认会有一个冒号和一个空格。 相关函数 [[psiginfo|psiginfo]]
4. 捕捉信号 4.1. 内核如何实现信号的捕捉 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信号的处理函数sighandler。 当前正在执行main函数,这时发生中断或异常切换到内核态。 在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达
3. 阻塞信号 3.1. 信号在内核中的表示 以上我们讨论了信号产生(Generation)的各种原因,而实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽
2. 产生信号 2.1. 通过终端按键产生信号 上一节讲过,SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump,现在我们来验证一下。 首先解释什么是Core Dump。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误,事
第 33 章 信号 目录 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核中的表示 3.2. 信号集操作函数 3.3. sigprocmask 3.4. sigpending 4. 捕捉信号 4.1. 内核如何实现信号的捕捉 4.2. sigaction 4.3. pause
当你使用社交账号(Facebook,Twitter,GitHub 或者 Google)注册时会出现复制账号的界面,然后使用这个表单重新注册 这样子,你就可以创建两个不同的账号(一个关联你的邮箱,另一个关联你的社交账号)。 你可以像下面这样来 删除 一个账号: 从关联你邮箱的账号登出 使用社交账号登录 在 www.gitbook.com/settings 里删除和这个社交账号关联的账号 重新使用你的
Vim的标记系统对于我们是非常有用的。使用强大ctags工具,我们能够在vim中分析 代码生成tags标记。 exVim通过采用 ex-tags 和 ex-symbol 插件进行改善。exVim通过:Update命令生成tags。 选择标记 在vim中可以使用<ctrl-]和:ts tag-name跳转到对应tags。ex-tags 提供同样的办法但是却不同的命令---<leader>] 和:TS
这是一个处理需要反复标记的问题的一个小技巧,以一个ACM形式的题目为例: 输入:第一行是一个数字N,表示N个case,之后每个case第一行是一个数字M,表示这个case有M个数字输入,接下来是M个数字,每个数字范围是0<=n<K 输出:对每个case,输出M个数字去重后的数量 当然,这题本身没什么难度,弄个hash_set就行了,不过为了说明问题,我们假定做题的人比较笨,使用bitmap: bm
软件的版本号由以下4部分组成: 主要版本号.次要版本号.版本状态码[.修订号] 应根据下面的约定使用这些部分: 主要版本:主要版本号不同,意味着本版本进行了大幅的本质修改,并且可能出现不同版本不兼容的问题。 次要版本:次要版本号不同,意味着功能的显著增强,但考虑了向后兼容性。 版本状态码:版本状态码包含了对当前版本的一些描述。它具体包含了以下信息: 发布状态。 0: 计划版(planned):计
事件 signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)… 我这里还是不翻译好了。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调用应用的 exec_() 方法时,应用会进入主循环,主循环会监听和分发事件。 在事件模型中,有三个角色: 事件源 事件 事件目标 事件源就是发生了状态改变的对象。
Linux进程基础一文中已经提到,Linux以进程为单位来执行程序。我们可以将计算机看作一个大楼,内核(kernel)是大楼的管理员,进程是大楼的房客。每个进程拥有一个独立的房间(属于进程的内存空间),而每个房间都是不允许该进程之外的人进入。这样,每个进程都只专注于自己干的事情,而不考虑其他进程,同时也不让别的进程看到自己的房间内部。这对于每个进程来说是一种保护机制。(想像一下几百个进程总是要干涉
信号(singal)简介 我们在生活中经常遇到信号。比如说,股票的走势图,心跳的脉冲图等等。在通信领域,无论是的GPS、手机语音、收音机、互联网通信,我们发送和接收的都是信号。最近,深圳地铁通信系统疑似与WiFi信号冲突,也就是地铁的天线收到了WiFi的信号,而误把该信号当作地铁通信信号。我们的社会信息化,是建立在信号的基础上的。 信号:最近三年的沪指指数 信号是随着时间或者空间变化的序列。在信号
我们一直在使用符号。符号,在看似简单的表面之下,又好像没有那么简单。起初最好不要纠结于背后的实现机制。可以把符号当成数据对象与名字那样使用,而不需要理解两者是如何关联起来的。但到了某个时间点,停下来思考背后是究竟是如何工作会是很有用的。本章解释了背后实现的细节。 8.1 符号名 (Symbol Names) 第二章描述过,符号是变量的名字,符号本身以对象所存在。但 Lisp 符号的可能性,要比在多
帐号云广播功能可以实现远程通信,只要登陆慧编程账号,即使电脑与光环板相隔两地,也可以远程控制光环板。 注册/登陆慧编程 点击工具栏右侧的登陆/注册按钮,依据提示登陆/注册账号。 启用上传模式 点击启用上传模式。 舞台按钮远程控制光环板 我们新建一个项目,结合舞台编程,用按钮来远程控制光环板。 添加帐号云广播积木 选中“角色”,在积木区点击“+”。“扩展中心”页面会弹出,点击添加“帐号云广播”。 步