阻塞操作:当进程的执行条件不成立时,会阻塞等待执行条件的满足。
进程:资源分配的最小单位
线程:内核调度的最小单位
程序:
text:代码段
data:数据段
stack:栈段
pid ppid
ps -ef
交互进程
批处理进程
守护进程
僵尸进程:子进程退出,父进程没有退出,子进程的系统资源没有被回收,该子进程称为僵尸进程
子进程的资源会由父进程根据子进程的退出状态来回收子进程的资源
ps
top
nice 设置程序运行的优先级,程序未执行-20到19,数字越小,优先级越大
renice 设置进程的优先级,进程在执行中
kill,pkill,xkill
bg, fg
#include
#include
vfork之后的代码都是各自都有的代码,不共享
pid_t fork(void);
fork()后,子进程会拷贝和父进程的所有资源
返回值:
成功:
在父进程中,返回子进程的pid
在子进程中,返回0
失败:
在父进程中,返回-1
在子进程中,没有子进程
fork()及时拷贝
pid_t vfork(void);
只会为子进程创建 task_struct
父子进程共享同一资源,父进程暂停,子进程结束后,父进程才执行
子进程必须调用 exec();或者exit()父亲进程才能正常执行
int execl(const char *path, const char *arg, ...);
path:程序的路径
*arg:参数,最后一个为NULL作为结束标识符如调用
ls -l: execl("/bin/ls", "ls", "-l", NULL);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
#include void exit(int status);
会释放资源
#include void _exit(int status);
不会释放资源
pid_t wait(int *status);
wait:会等待一个子进程返回才执行,阻塞操作
status:用于保存退出子进程的状态,9-15位,
返回值为该退出子进程的id
会话:一个会话下,可以有很多个进程组
进程组:一个程序的执行,会创建多个进程
pid_t waitpid(pid_t pid, int *status, int options);
pid:若为正数,会等待该pid的子进程
若为-1,等待任意一个子进程;同wait
若为0, 等待其组id等于等于调用进程组的组ID的任意子进程
options:
WNOHANG:
守护进程:后台运行,对所有用户一视同仁
编写:
创建子进程,父进程退出
在子进程中创建新会话
创建子进程,父进程退出
改变工作目录为根目录
重设文件权限掩码
关闭文件描述符
setsid() 创建一个新的会话组,使当前进程为新会话组的组长,
getdtablesize()获得当前系统的最大描述符,linux默认为1024
阅读(1119) | 评论(0) | 转发(0) |