Unix/Linux编程实践教程(一:进程、管道)

execvp在程序中启动新程序:

Unix/Linux编程实践教程(一:进程、管道)

用fork创建新进程:

Unix/Linux编程实践教程(一:进程、管道)

Unix/Linux编程实践教程(一:进程、管道)

Unix/Linux编程实践教程(一:进程、管道)

forkdemo2代码:

Unix/Linux编程实践教程(一:进程、管道)

测试fork的时候参考《Linux权威指南》阅读笔记(3)  使用了patch:

[root@localhost programming]# diff -c forkdemo2.c forkdemo2_new.c > forkdemo2.patch
[root@localhost programming]# patch < forkdemo2.patch
patching file forkdemo2.c
[root@localhost programming]# ls -lrt
total
-rwxrwxrwx root root Sep : forkdemo2
-rwxrwxrwx root root Sep : forkdemo2_new
-rwxrwxrwx root root Sep : forkdemo2_new.c
-rwxrwxrwx root root Sep : forkdemo2.patch
-rwxrwxrwx root root Sep : forkdemo2.c
[root@localhost programming]#

这个forkdemo2输出的pid个数也挺有意思,最好从最底层往上算。

怎么判断是父进程还是子进程:在父进程中fork()的返回值是子进程的pid,在子进程中是0。

父进程用wait等待子进程退出:

Unix/Linux编程实践教程(一:进程、管道)

Unix/Linux编程实践教程(一:进程、管道)

Unix/Linux编程实践教程(一:进程、管道)

子进程退出值保存在wait的参数中:

Unix/Linux编程实践教程(一:进程、管道)

shell的fork、wait、exit:

Unix/Linux编程实践教程(一:进程、管道)

exit细节:

Unix/Linux编程实践教程(一:进程、管道)

exec家族:

Unix/Linux编程实践教程(一:进程、管道)

释放char**的空间函数值得参考(截图的时候命名带char**竟然没法保存,因为文件名中不能带*,忘记了):

Unix/Linux编程实践教程(一:进程、管道)

exit0表示成功:

Unix/Linux编程实践教程(一:进程、管道)

脚本中增加流程控制时的处理函数:

Unix/Linux编程实践教程(一:进程、管道)

shell变量的存储方式:

Unix/Linux编程实践教程(一:进程、管道)

标准C库函数getenv可以读取环境变量值:

Unix/Linux编程实践教程(一:进程、管道)

环境变量保存在一个字符串数组:

Unix/Linux编程实践教程(一:进程、管道)

comm命令比较两个文件:

Unix/Linux编程实践教程(一:进程、管道)

使用comm命令找出离开及新登录用户:

Unix/Linux编程实践教程(一:进程、管道)

最低可用文件描述符原则:

Unix/Linux编程实践教程(一:进程、管道)

重定向的方法:

Unix/Linux编程实践教程(一:进程、管道)

close-then-open方法输入重定向:

Unix/Linux编程实践教程(一:进程、管道)

open-close-dup-close方法:

Unix/Linux编程实践教程(一:进程、管道)

用open-close-dup-close方法输入重定向:

Unix/Linux编程实践教程(一:进程、管道)

系统调用dup小结:

Unix/Linux编程实践教程(一:进程、管道)

open-dup2-close方法:

Unix/Linux编程实践教程(一:进程、管道)

系统调用pipe创建管道:

Unix/Linux编程实践教程(一:进程、管道)

上一篇:centos 7 破解密码


下一篇:java8 list和map的forEach