进程控制
1 程标识函数:定义在unistd.h中
pid(id) 获得进程ID
pid_t getppid(id) 获得进程父进程的ID
pid_t getuid() 获得进程的实际用户ID
pid_t geteuid() 获得进程的有效用户ID
pid_t getgid() 获得进程的实际组ID
pid_t getegid(id) 获得进程的有效组ID
- 进程控制
1) fork: 用户创建一个新进程(创建一个新进程的唯一方法)
#include <sys/types.h>
#include <unist得到的 d.h>
pid_t fork(void);
注意:fork函数非常特殊,它有两个返回值,一个是父进程调用fork函数后的返回值,该返回值是刚刚创建的子进程ID,另一个是子进程中fork函数的返回值,该返回值是0。
exit: 用于终止进程
exec:用于执行一个应用程序
wait:将父进程挂起,等待子进程终止
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *statloc);
pid_t waitpid(pid_t pid,int *statlic, int options);
参数statloc存放子进程的退出码
getpid:获取当前进程的ID
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
nice:改变进程的优先级
#include <unistd.h>
Int nice(int increment);
3 fork和vfork的区别
使用fork创建子进程时,子进程完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。而使用vfork创建一个子进程时,操作系统并不将父进程的进程地址完全复制到子进程,vfork创建的子进程共享父进程的地址空间,也就是说子进程完全运行在父进程的地址空间上,子进程对该地址空间中的任何数据的修改同样为父进程所见。
使用fork创建一个子进程时,哪个进程先运行取决于系统的调度算法,而vfork一个进程,保证子进程先运行,当它调用exec或者exit之后,父进程才可能被调度。如果在调用exec或者exit之前子进程要依赖父进程的某个行为,就会导致死锁。