标签:time c函数 守护进程 uid 唤醒 包括 失败 tty linux
一、基本概念
1、进程与程序
程序:是存储在磁盘上的文件,他是包含要执行的机器指令和数据的静态实体
进程:是一个正在运行的程序,一个程序可能包含多个进程,进程在操作系统中是一个执行特殊任务的单位
2、进程的分类
交互进程、批处理进程、守护进程
3、查看进程
ps:显示当前用户当前终端所控制的进程
-a:显示所有用户进程
-x:包括无终端控制的进程
-u:显示详细信息
-w:以更宽的宽度来显示
4、进程信息表 ps -aux | grep "name" 过滤
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
5、进程状态
O:就绪态,等待被调用
R:运行态,Linux下没有没有就绪态
S:可被唤醒的睡眠态
D:不可被唤醒的睡眠态
T:暂停态,收到了SIGSTOP信号,当收到SIGCONT信号则继续运行
X:死亡态
Z:僵尸态
<:最高优先级
N:低优先级
L:多线程进程
S:有子进程的进程
+:后台进程组
6、父子进程
如果进程B是由进程A开启的,那么我们就把进程A叫进程B的父进程,进程B叫做进程A的子进程
当子进程结束后会向父进程发送,SIGCHLD,父进程收到信号后再去回收子进程
当父进程先结束,子进程就会变成孤儿进程,会被孤儿院(init)收养
如果子进程已经结束,但父进程没有及时回收,子进程就变成了僵尸进程
二、 getxxpid
pid_t getpid(void);
功能:获取进程id
pid_t getppid(void);
功能:获取父进程id
uid_t getuid(void);
功能:获取实际使用者的用户id
uid_t geteuid(void);
功能:获取程序的拥有者的用户id
gid_t getgid(void);
功能:获取实际使用者的组id
gid_t getegid(void);
功能:获取程序的拥有者的组id
三、fork
pid_t fork(void);
功能:创建子进程
失败返回-1,如果成功父进程会返回子进程的id,子进程返回0,通过fork创建出的子进程,就是父进程的副本,它会把父进程的堆、栈、全局段、静态数据段、IO流的缓冲区都拷贝一份,父子进程共享代码段
四、vfork
pid_t vfork(void);
功能:创建子进程
vfork不能单独创建子进程,需要与exec函数簇,配合才能完成子进程的创建,他与fork不同,他不会复制父进程的堆、栈、数据、全局段等,也不会共享代码段,而是通过excl函数调用一个程序直接启动,全面提高了创建进程的效率
五、exec函数簇
int execl(const char *path, const char *arg, ...);
path:可执行文件的路径
arg:给可执行文件的参数,类似于命令行参数,可以是无限个,必须以NULL结尾,第一个必须是可执行文件名
//execl("","a.out",NULL);
int execlp(const char *file, const char *arg, ...);
file:可执行文件的文件名,会从PATH环境变量指定的位置去找可执行文件
int execle(const char *path, const char *arg,..., char * const envp[]);
envp:修改后的环境变量表
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);
标签:time c函数 守护进程 uid 唤醒 包括 失败 tty linux
原文地址:https://www.cnblogs.com/xkk956227639/p/9365364.html