linux信号

linux下c++进程相关

不打扰是莪最后的温柔 提交于 2020-01-01 00:27:13
1.首先是获取当前程序的pid和ppid(parent pid) #include<stdio.h> #include<unistd.h> int main() { printf("the pid of this program is %d\n",(int)getpid()); printf("the parent pid is %d\n",(int)getppid()); return 0; } 执行过程中发现,多次执行后pid一般会变化,而ppid一般不会变, 2.在程序中创建新进程可以有两种方式,一种是直接通过system函数,该函数相当于创建一个子进程,并将函数内的参数传递给该子进程,等同于在命令行下执行该命令,若该shell无法执行,则返回值为127,其他错误则返回值-1,执行正确返回值0; #include<stdlib.h> #include<stdio.h> int main() { int returnValue = system("ls -l"); printf("%d\n",returnValue); return 0; } system函数执行的结果被返回到终端中输出 还有一种方法就是通过fork()/exec()创建新进程,fork()函数创建一个父进程的拷贝给子进程,并在调用fork函数处继续执行下去,创建出的子进程也继续在该出进行

Linux 信号表

六眼飞鱼酱① 提交于 2020-01-01 00:26:59
信号 取值 默认动作 含义(发出信号的原因) SIGHUP 1 Term 终端的挂断或进程死亡 SIGINT 2 Term 来自键盘的中断信号 SIGQUIT 3 Core 来自键盘的离开信号 SIGILL 4 Core 非法指令 SIGABRT 6 Core 来自abort的异常信号 SIGFPE 8 Core 浮点例外 SIGKILL 9 Term 杀死 SIGSEGV 11 Core 段非法错误(内存引用无效) SIGPIPE 13 Term 管道损坏:向一个没有读进程的管道写数据 SIGALRM 14 Term 来自alarm的计时器到时信号 SIGTERM 15 Term 终止 SIGUSR1 30,10,16 Term 用户自定义信号1 SIGUSR2 31,12,17 Term 用户自定义信号2 SIGCHLD 20,17,18 Ign 子进程停止或终止 SIGCONT 19,18,25 Cont 如果停止,继续执行 SIGSTOP 17,19,23 Stop 非来自终端的停止信号 SIGTSTP 18,20,24 Stop 来自终端的停止信号 SIGTTIN 21,21,26 Stop 后台进程读终端 SIGTTOU 22,22,27 Stop 后台进程写终端     SIGBUS 10,7,10 Core 总线错误(内存访问错误) SIGPOLL Term

转:步步LINUX C--进程间通信(二)信号

折月煮酒 提交于 2020-01-01 00:25:11
源地址: http://blog.csdn.net/jmy5945hh/article/details/7529651 linux间进程通信的方法在前一篇文章中已有详细介绍。 http://blog.csdn.net/jmy5945hh/article/details/7350564 本篇详细介绍及代码测试第二种方式,即 信号(Signal)。 1 信号简介 信号全称为软中断信号,主要用于进程控制。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 信号的来源包括硬件来源与软件来源。 生存周期从被创建开始,到进程接收到信号。某些情况下允许信号排队。 内核对信号的处理机制: (1)发送信号的方法为在进程所在的进程表项的信号域设置对应于该信号的位。 (2)睡眠进程的睡眠优先级高于信号时,信号不会唤醒进程。 (3)内核处理信号的时机是进程从内核态返回用户态时或者进程要切换到低优先级睡眠态时。 (4)处理方法:退出,忽略或通过signal函数调用用户定义函数处理。 典型应用:LINUX下程序在命令行运行时,按下CTRL+C将向程序发送SIGINT信号,强制进程结束。 在命令行使用kill -l命令可以列出所有LINUX系统支持的信号 值得注意的是,信号的编号不是连续的

Linux信号机制

回眸只為那壹抹淺笑 提交于 2020-01-01 00:24:43
1.信号本质   信号是进程间通信机制中唯一的异步通信机制,在软件层次上是对中断机制的一种模拟。即信号类似软中断。   信号和软中断的区别:     [1]中断有优先级,而信号没有优先级。     [2]信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行。     [3]中断响应是及时的,而信号响应通常都有较大的时间延迟。 2.信号的种类    信号分为可靠信号和不可靠信号。   可靠信号:可靠信号即通过排队的方式使信号不会丢失,信号值位于[SIGRTMIN,SIGRTMAX]之间的信号都是可靠信号。   不可靠信号:信号值小于SIGRTMIN的信号都是不可靠信号,即不会进行排队。 [root@node01 ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU

Linux 进程间通信系列之 信号

雨燕双飞 提交于 2020-01-01 00:22:04
信号(Signal) 信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号 语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又 能够统一对外接口,用sigaction函数重新实现了signal函数) 信号种类 每种信号类型都有对应的信号处理程序(也叫信号的操作),就好像每个中断都有一个中断服务例程一样。大多数信号的默认操作是结束接收信号的进程;然而,一个进程通常可以请求系统采取某些代替的操作,各种代替操作是: 忽略信号。随着这一选项的设置,进程将忽略信号的出现。有两个信号 不可以被忽略:SIGKILL,它将结束进程;SIGSTOP,它是作业控制机制的一部分,将挂起作业的执行。 恢复信号的默认操作。 执行一个预先安排的信号处理函数。进程可以登记特殊的信号处理函数。当进程收到信号时,信号处理函数将像中断服务例程一样被调用,当从该信号处理函数返回时,控制被返回给主程序,并且继续正常执行。 但是,信号和中断有所不同。中断的响应和处理都发生在内核空间,而信号的响应发生在内核空间,信号处理程序的执行却发生在用户空间。 那么,什么时候检测和响应信号呢?通常发生在两种情况下: 当前进程由于系统调用

Linux 进程间通信 --信号

时间秒杀一切 提交于 2020-01-01 00:21:12
  一、 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 二、信号的种类     信号的名称是在头文件signal.h中定义的,信号都以SIG开头     命令行输入 kill -l 即可查看所有的信号      三、进程对信号的响应   进程可以通过三种方式来响应一个信号: (1)忽略信号,即对信号不做任何处理,其中, 有两个信号不能忽略:SIGKILL及SIGSTOP; (2)捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数; (3)执行缺省操作,Linux对每种信号都规定了默认操作。注意,进程对实时信号的缺省反应是进程终止。   Linux究竟采用上述三种方式的哪一个来响应信号,取决于传递给相应API函数的参数。 四、信号的发送   发送信号的主要函数有:kill()、raise()、 sigqueue()、alarm()、setitimer()以及abort()。   kill (int pid ,int signl) 既可以向自身发送信号,也可以向别的进程发送信号   raise(int signl) 只能向进程本身发送信号。   alarm() 在指定的时间之后发送给自己 一个 SIGALRM的信号

xCrash捕获Native异常(一)

谁都会走 提交于 2019-12-30 11:37:44
Native异常 android 开发过程中有时候需要使用JNI的方式调用C/C++的库。因此在调试的过程如果发现崩溃异常,如果能够获取C/C++ 的异常堆栈,则可以方便的确定哪一行代码出现了问题,方便快速的定位问题。 在捕获Native异常中,原理上面基本是采用linux的信号机制。 linux信号机制 关于Unix-like系统的信号机制可以参见《深入Linux内核》第4章 中断和异常 ;第11章 信号。 关于信号和异常介绍比较好的博客有: https://blog.csdn.net/ypt523/article/details/80290208。感谢博主的无私贡献。 Linux 信号相关编程,进程编程,需要查询相关资料,本文不进行介绍。 xCrash捕获Native异常配置 与Native异常相关的配置属性有 public final class XCrash{ ... public static class InitParameters { // anr异常处理器,默认为true,如果为false不捕获anr异常 boolean enableAnrHandler = true; // 是否恢复捕获anr异常。默认为true boolean anrRethrow = true; // 是否设置anr的状态标志给进程状态(具体参见源码中的注释) boolean

Linux进程信号详解

↘锁芯ラ 提交于 2019-12-28 06:16:10
信号是什么 一个信号就是一条小消息,它通知进程系统中发生了一个某种类型的事件 信号是多种多样的,并且一个信号对应一个事件,这样才能做到收到一个信号后,知道到底是一个什么事件,应该如何处理(但是要保证必须识别这个信号) 信号的种类 使用 kill-l 命令查看信号种类 一共62种,其中1 31是非可靠信号,34 64是可靠信号(非可靠信号是早期Unix系统中的信号,后来又添加了可靠信号方便用户自定义信号,这二者之间具体的区别在下文中会提到) 信号的生命周期 产生》》进程中的注册》》进程中的注销》》捕获处理 信号的产生 硬件事件举例: 如果一个进程试图除以0,那么内核就发送给它一个SIGFPE信号(序号8) 如果一个进程执行一条非法指令,那么内核就发送给它一个SIGILL信号(序号4) 如果进程进行非法存储器引用(野指针、段错误),内核就发送给它一个SIGSEGV信号(序号11) 软件事件举例: ctrl+c 中断信号——20) SIGTSTP ctrl+| 退出信号——3) SIGQUIT ctrl+z 停止信号——2) SIGINT kill命令: kill -signum pid 当kill命令不带 -signum 参数时( kill pid ),默认的信号是15) SIGTERM 而 kill -9 pid 则是一个强大的“强杀”命令,能杀死 kill pid

Linux程序设计 Beginning_Linux_Programming

£可爱£侵袭症+ 提交于 2019-12-28 00:01:25
好文: https://blog.csdn.net/qq_29996285/article/details/94191750 2019-06-17 21:48:55 终于知道为啥C语言开头要include<stdio.h> 了! Write系统调用: OPEN系统调用: Close 系统调用: ioctl系统调用: 一个文件复制程序: 改进版: 一个目录扫描程序:P103 改进main函数,使其变成一个更有用的目录浏览器。 输出结果将分页显示,用户可以通过翻页查看其输出。 可以说,用户现在有了一个非常方便,通用的目录树浏览器。 3.10 /proc文件系统 该目录中包含了许多特殊文件用来对驱动程序和内核信息进行更高层的访问 查看CPU: 查看内存: 查看内核版本信息: 查看网络套接字的使用统计 查看系统中所有运行的程序同时能打开的文件总数: ps命令会给出当前正在运行进程的列表。 第四章: Linux环境: 4.1程序参数 这个程序利用计数参数argc建立一个循环来检查所有的程序参数。 4.2 环境变量 4.2.2 environ变量。 程序可以通过environ变量直接访问这个字符串数组。 这个程序遍历environ遍历,并打印出整个环境。 4.3 时间和日期 这个程序演示了time函数的用法 以从1970年开始计算的秒数来表示时间和日期。 为了提供(对人类)更有意义的时间和日期

linux线程的新旧实现

纵然是瞬间 提交于 2019-12-27 08:19:37
Linux从内核2.0到内核2.4期间多线程编程使用的是LinuxThread,但使用这种方式写出的多线程程序在诸多特性上并不是跟POSIX标准兼容的. 从内核2.6开始有了新的线程实现方式NPTL(Native POSIX Thread Library)。NPTL号称解决了LinuxThread中绝大多数跟POSIX标准不兼容的特性,并提供了更好的性能,可扩展性及可维护性等等。 一, LinuxThread 在实现LinuxThread之前,系统内核并没有提供任何对线程的支持,实现LinuxThread时也并没有针对其做任何的改动,所以LinuxThread只能使用现有的系统调用来创建一些用户接口来尽量模仿POSIX定义的API的语义,这也就是导致了pthread之外的系统调用接口表现出来的行为跟POSIX的线程标准不一致,如最简单的在同一个进程里的不同线程里调用getpid()的结果不一致 创建线程 : LinuxThread使用的是1 * 1模型,即每一个用户态线程都有一个内核的管理实体跟其对应,这个内核对应的管理实体就是进程,又称LWP(轻量级进程)。这里先说一下,系统调用clone(),大家熟知的fork()函数就是调用clone()来实现父进程拷贝的从而创建一个新进程的。系统调用clone()里有一个flag参数,这个参数有很多的标志位指定了克隆时需要拷贝的东西