linux系统调用
吾竹清风
因为你努力了,所以时间给了财富!
展开
-
02_fork和vfork的使用
#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <errno.h>#include &l翻译 2018-08-14 16:32:35 · 202 阅读 · 0 评论 -
15_发送信号sigqueue()传参数和捕捉信号sigaction()传参
发送信号传参igqueue函数对应kill函数,但可在向指定进程发送信号的同时携带参数int sigqueue(pid_t pid, int sig, const union sigval value);成功:0;失败:-1,设置errno union sigval { int sival_int; v...翻译 2018-08-21 21:53:31 · 1927 阅读 · 0 评论 -
14_sigaction 函数注册信号处理函数
sigaction函数 包含头文件&lt;signal.h&gt; 功能:sigaction函数用于改变进程接收到特定信号后的行为。 原型:int sigaction(int signum,const struct sigaction *act,const struct sigaction *old); 参数 该函数的第一个参数为信号的值,可以为除SIG...原创 2018-08-21 19:57:49 · 759 阅读 · 0 评论 -
13_信号的阻塞与未达
信号在linux中的传递过程信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。 注意,阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。 ...原创 2018-08-21 14:08:16 · 286 阅读 · 0 评论 -
12_竞态条件(时序竞态)
/* 使用自定义的sleep1()与真正的sleep()的实现。 但会有3 个问题: 1)在sleep1()之前调用alarm 2)程序修改了SIGALRM信号的默认行为 3)alarm()与pause()之间有竞争条件,若alarm()在调用pause之前超时 ,并调用了信号处理程序,此时调用pause后,因没有捕捉到其他信号处理函数 ,造成函数永久被挂起 ...翻译 2018-08-21 13:48:06 · 225 阅读 · 0 评论 -
11_alarm()和可重入函数
pause()函数 将进程置为可中断睡眠状态。然后它调用内核函数schedule(),使linux进程调度器找到另一个进程来运行。 pause使调用者进程挂起,直到一个信号被捕获NAME alarm - set an alarm clock for delivery of a signalSYNOPSIS #include &lt;unis...翻译 2018-08-20 21:43:26 · 241 阅读 · 0 评论 -
10_信号发送函数kill()和raise()
信号发送Kill基本用法发送信号的函数有kill和raise区别:kill既可以向自身发送信号,也可以向其他进程发送信号;raise函数向进程自身发送信号。Int kill(pid_t pid, int siq) int raise(int signo)Int kill(pid_t pid, int siq)参数组合情况解释:kill(pid_t pid, int siq)...翻译 2018-08-20 20:05:53 · 499 阅读 · 0 评论 -
09_signal()函数的使用
/* signal()信号捕捉函数忽略以及对pause造成的影响 pause()使调用进程挂起直至捕捉到一个信号; 只有执行了一个信号处理程序并从其返回时,pause()才返回。 这种情况下,pause 返回-1 ,errno 置为EINTR信号函数的原型: void (* signal(int signum, void (*f...翻译 2018-08-20 18:37:54 · 184 阅读 · 0 评论 -
08_中断的概念及信号的基本概念
中断 中断是系统对于异步事件的响应 中断信号 中断源 现场信息 中断处理程序 中断向量表异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序生活中的中断和计算机系统中的中断1) 无中断生活场景张三看书,厨房烧水2)有中断的生活场景张三看书,设置闹钟,厨房烧水。闹钟发出中断信号,张三把书合好(第20页),去厨房把开...原创 2018-08-20 11:20:10 · 1421 阅读 · 0 评论 -
06_1两次调用
/* 两次调用的作用: 第一次是获取字符串的长度 第二次是跟据第一次获取的长度分配内存*/#include <stdlib.h>#include <stdio.h>#include <string.h>int getMem(char *p, char *meml, int *len){ char *str = "he...原创 2018-08-20 10:53:42 · 191 阅读 · 0 评论 -
07_system 库函数使用
System 功能:system()函数调用“/bin/sh -c command”执行特定的命令,阻塞当前进程直到command命令执行完毕 原型: int system(const char *command); 返回值: 如果无法启动shell运行命令,system将返回127;出现不能执行system调用的其他错误时返回-1。如果system能够顺利...原创 2018-08-17 12:25:43 · 311 阅读 · 0 评论 -
06_父进程wait和waitpid_01
1、wait和waitpid出现的原因SIGCHLD 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。父进程查询子进程的退出状态可以用wait/waitpid函数2、wait和...原创 2018-08-17 12:18:19 · 279 阅读 · 0 评论 -
01_fork()的使用
0号进程是空闲进程 1号进程是第一个用户进程 查看内核进程pid最大配置:cat /proc/sys/kernel/pid_max**fork系统调用相关说明**复制一个进程映象fork 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控...翻译 2018-08-13 20:50:51 · 527 阅读 · 0 评论 -
05_守护进程
什么是守护进程 守护进程是在后台运行不受控端控制的进程,通常情况下守护进程在系统启动时自动运行 守护进程的名称通常以d结尾,比如sshd、xinetd、crond等 ps -ajx hzmct@U-64:/study/linuxtest/day01/04demon$ ps -ajx PPID PID PGID SID TTY ...原创 2018-08-15 21:45:34 · 154 阅读 · 0 评论 -
04_进程终止的5种方式
进程终止的5种方式 正常退出 从main函数返回 调用exit(c语言库函数) 调用_exit(系统调用) 异常退出 调用abort 产生SIGABOUT信号 由信号终止 ctrl+c SIGINT /* exit可以清空IO缓存区, _exit(0)不会清空缓冲区*/#if 1void t...原创 2018-08-14 20:29:04 · 804 阅读 · 0 评论 -
03_exec函数族替换进程印象
exec替换进程印象 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。 当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。exec关联的函数族 包含头文件&amp;lt;unistd.h&amp;gt; 功...转载 2018-08-14 19:13:47 · 218 阅读 · 0 评论 -
对信号量的理解
进程的三种状态进程通常分为就绪、运行和阻塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下:三态模型.jpeg进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。信号量信号量是最早出现的用来解决进程同1步与互斥问题的机制。 信号量(Semaphore)由一个值和一个指针组成,指针指向等待该信号量的进程...翻译 2019-09-29 09:03:58 · 2531 阅读 · 0 评论