1. 程序—进程—进程ID—pit_t类型。
2. Get pid();取得进程IDgetppid();取得父进程ID。
a) getuid();geteuid(); getgid(); getegid(); 取得用户ID及组ID。
3. Fork函数创建新的进程。 Pid_tfork(void);
a) Fork函数不需要参数。
b) 对于父进程fork函数返回创建子进程pid号。
c) 对于子进程fork函数返回0, 系统0号进程为内核进程,以示区别。
d) 若创建子进程错误,则fork函数返回-1。
e) 创建子进程复制父进程进程空间,包括数据段和堆栈段。共享代码段。
4. Vfork函数创建共享父进程空间的子进程,且子进程一定比父进程先运行。
5. 不要在任何函数调用中使用vfork函数,避免函数栈帧空间的多次返回。
6. Void exit(int);函数会深入内核注销掉进程的内核数据结构。并且释放进程的资源。
a) Exit函数的参数表示退出的状态。
7. Exit函数为封装了Linux系统调用_exit函数,exit函数在用户空间做善后工作如清理用户I/O缓冲区,将内容写入磁盘等。以后进入内核释放用户进程的地址空间。
8. 调试多进程:
a) 设置跟踪流: set follow-fork-mode [parent|child]跟踪流选项。
b) set detach-on-fork [on|off] set指定的进程将被调试,另一个进程将被停止。
c) attach命令:没看懂!待查资料。
9. exec搜寻文件系统中的文件,并将内容复制到exec函数的地址空间,取代原进程的内容。实现讲磁盘中的程序加载到内存中。Exec几乎不改变进程的身份属性。
a) execl(); execle();execv(); execve(); execlp(); execvp();
10. exech函数执行解释器文件(如shell脚本)时,解释器文件中命令行参数在前,exec函数传递给新程序的命令行在后。
11. 使用system函数调用shell命令。
a) Int system(const char *cmdstring);
b) System的返回状态。
c) System实现过程中调用fork及exec执行效率偏低,但是函数添加了出错处理,信号处理,及wait函数避免出现僵尸进程。
12. Wait函数等待子进程的退出,并获得起退出的状态信息,但只能等待一个结束的进程。
13. Waitpid函数等待一个指定的进程结束。且可以不阻塞的等待一个进程。
14. 当父进程调用fork()函数创建子进程,而不用wai函数取得子进程的结束状态信息时,僵尸进程会出现。僵尸进程放弃了几乎所有系统资源包括进程空间,因而僵尸进程不能执行,虽然僵尸进程占用的内存微乎其微且不能被CPU调用,但是僵尸进程一直存在在系统中知道父进程取得结束状态信息。 Linux有严格的进程数目限制,如果僵尸进程达到一定数目是,系统中将不能产生新的进程。
15. Linux中 Init进程领养所有的孤儿进程,会永远调用wait函数避免产生僵尸进程。
16. Wait3和wait4函数输出错误的统计信息。