execvp在程序中启动新程序:
用fork创建新进程:
forkdemo2代码:
测试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 7 -rwxrwxrwx 1 root root 4953 Sep 6 11:05 forkdemo2 -rwxrwxrwx 1 root root 4957 Sep 6 11:14 forkdemo2_new -rwxrwxrwx 1 root root 119 Sep 6 11:17 forkdemo2_new.c -rwxrwxrwx 1 root root 263 Sep 6 11:24 forkdemo2.patch -rwxrwxrwx 1 root root 119 Sep 6 11:24 forkdemo2.c [root@localhost programming]#
这个forkdemo2输出的pid个数也挺有意思,最好从最底层往上算。
怎么判断是父进程还是子进程:在父进程中fork()的返回值是子进程的pid,在子进程中是0。
父进程用wait等待子进程退出:
子进程退出值保存在wait的参数中:
shell的fork、wait、exit:
exit细节:
exec家族:
释放char**的空间函数值得参考(截图的时候命名带char**竟然没法保存,因为文件名中不能带*,忘记了):
exit0表示成功:
脚本中增加流程控制时的处理函数:
shell变量的存储方式:
标准C库函数getenv可以读取环境变量值:
环境变量保存在一个字符串数组:
comm命令比较两个文件:
使用comm命令找出离开及新登录用户:
最低可用文件描述符原则:
重定向的方法:
close-then-open方法输入重定向:
open-close-dup-close方法:
用open-close-dup-close方法输入重定向:
系统调用dup小结:
open-dup2-close方法:
系统调用pipe创建管道: