随笔分类 - Linux
摘要:signal函数 注册一个信号捕捉函数: typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 该函数由ANSI定义,由于历史原因在不同版本的Unix和不同版本的Linux中
阅读全文
摘要:alarm函数 设置定时器(闹钟)。在指定seconds后,内核会给当前进程发送14)SIGALRM信号。进程收到该信号,默认动作终止。 每个进程都有且只有唯一个定时器。 unsigned int alarm(unsigned int seconds); 返回0或剩余的秒数,无失败。 常用:取消定时
阅读全文
摘要:产生信号五种方法: 信号四要素: 编号、名称、事件、默认处理动作 信号的处理方式: Linux内核的进程控制块PCB是一个结构体,task_struct除了包含进程id,状态,工作目录,用户id,组id,文件描述符,还包含了信号相关的信息,主要指阻塞信号集和未决信号集。 阻塞信号集(信号屏蔽字):将
阅读全文
摘要:kill函数/命令产生信号 kill命令产生信号:kill -SIGKILL pid kill函数:给指定进程发送指定信号(不一定杀死) int kill(pid_t pid, int sig); 成功:0;失败:-1 (ID非法,信号非法,普通用户杀init进程等权级问题),设置errno sig
阅读全文
摘要:/* * 后执行,尝试读取另外一个进程写入文件的内容 */ #include #include #include #include #include int main(void) { char buf[1024]; char *str = "----------test2 write secesuss--------\n"; int ret; s...
阅读全文
摘要:mmap()函数: void *mmap(void* addr,size_t length,int port,int flags,int fd,off_t offset); 返回:成功:返回创建的映射区首地址;失败:MAP_FAILED 宏 参数: addr: 建立映射区的首地址,由linux内核决
阅读全文
摘要:运行结果: ubuntu1604@ubuntu:~/wangqinghe/C/20190805$ ./fork_test xxxxxxxx I'm parent,pid = 2610, ppid = 2558 I'm child,pid = 2611,ppid = 2610 YYYYYYYYYYY
阅读全文
摘要:孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。 僵尸进程: 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变为僵尸进程。
阅读全文
摘要:waitpid函数 作用同于wait,但可指定pid进程清理,可以不阻塞。 pid_t waitpid(pid_t pid,int *status,int options);成功:返回清理掉的子进程ID;失败:-1(无子进程) 特殊参数和返回情况: 参数pid: >0 回收指定ID的子进程 -1 回
阅读全文
摘要:wait()函数:回收僵尸进程 父进程调用wait函数可以回收子进程终止信息。该函数有三个功能: 1) 阻塞等待子进程退出 2) 回收子进程残留资源 3) 获取子进程结束状态(退出原因) pid_t wit(int *status); 成功:清理掉的子进程ID;失败:-1(没有子进程) 当进程终止时
阅读全文
摘要:将当前系统中的进程信息打印到文件中 命令行:ps aux > out 将ps得到的信息重定向到out文件中 使用dup2文件在程序中完成。 运行结果: ubuntu1604@ubuntu:~/wangqinghe/linux/20190806$ ls -l ps.out -rw-r--r-- 1 u
阅读全文
摘要:fork()函数生成的子进程只能运行与父进程相同的代码函数,如果想要子进程执行另外一个程序,需要用到exec族的函数,如下: execlp()函数 运行结果: ubuntu1604@ubuntu:~/wangqinghe/linux/20190806$ ./execlp 总用量 28 drwxrwx
阅读全文
摘要:父子进程共享打开的文件描述符 使用文件完成进程间通信. 运行结果: ubuntu1604@ubuntu:~/wangqinghe/linux/20190806$ ./fork_share_fd child wrote over... test for shared fd in parent chil
阅读全文
摘要:进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。但现在常用的进程间通信方式有: 管道 – 使用最简单 pipe 管道一般读写行为 FIFO(有名管道): 用于非血缘关系进程间通信 信号 – 开销最小 共享映射区 – 无血缘关系 nm
阅读全文
摘要:getenv获取环境变量值的函数; setenv改变或者添加环境变量函数; unsetenv 取消环境变量; (可以在终端上man 函数名来获取详细的函数信息) 运行结果: ubuntu1604@ubuntu:~/wangqinghe/C/20190805$ gcc setenv.c -o sete
阅读全文
摘要:常见环境变量 按照惯例,环境变量字符串都是name=value这样的形式,大多数name由大写字母加下划线组成,一般把name的部分叫做环境变量,value的部分则是环境变量的值。环境变量定义了进程的运行环境,一些比较重要的环境变量的含义如下: PATH 可执行文件的搜索路径。ls命令也是一个程序,
阅读全文
摘要:进程控制块PCB 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。 /usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_
阅读全文
摘要:gdb命令: 取消变量追踪:undisplay 编号 获取编号:info display 手动打印变量值: print – p 获取变量对应的类型:ptype
阅读全文
摘要:gdb启动 gdb 程序名 l 查看源代码(默认显示十行) l 文件名:行数 l 文件名:函数名 添加断点 break + 行数 (b 也行) b 15 if i == 15 条件断点 i b 查看断点信息 start 程序执行一步 n 单步调试 s 单步(能进到函数体内部) c 运行到断点 s 进
阅读全文
摘要:命令规则 lib + 名字 + .so 制作步骤 1)生成与位置无关的代码(生成与位置无关的代码) 2)将.o打包成共享库(动态库) 发布和使用共享库 动态库运行原理: 生成动态库: gcc -fPIC -c *.c -I ./include 打包动态库并移动 使用动态库: ubuntu1604@u
阅读全文