进程控制

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. 进程控制

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之前子进程要依赖父进程的某个行为,就会导致死锁。

posted on 2012-08-28 11:15  好坏  阅读(264)  评论(0编辑  收藏  举报

导航