1.进程标识符 pid
类型pid_t
命令
ps axf (描述当前进程)
ps axm(以详细信息查看)
ps ax -L (以linux特有的方式查看)
进程号是顺次向下使用
getpid();获取当前进程的id
getppid();获取当前进程的父进程的id
2.进程的产生
fork():(执行一次返回两次)
通过复制当前进程,创建一个新进程
fork()后父子进程的区别;
fork的返回值不一样,pid不同 ppid也不同,未决信号和文件锁不继承,资源利用量清0
init进程:(1号进程)
是所有进程的祖先进程
父子进程是由调度器的调度策略来决定哪个进程先运行(不一定子进程或者父进程先运行)
fflush()的重要性
vfork();
3.进程的消亡及释放资源
//等待进程状态发生变化
pid_t wait(int *status);//一直等到进程状态发生改变,通知wait,才会收尸
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
4.exec函数族
int execl(const char *path, const char *arg, ...
/* (char *) NULL */);
int execlp(const char *file, const char *arg, ...
/* (char *) NULL */);
int execle(const char *path, const char *arg, ...
/*, (char *) NULL, char * const 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[]);
5.用户权限及组权限
①getuid(); uid_t getuid(void);
②geteuid(); uid_t geteuid(void);
③getgid(); gid_t getgid(void);
④getegid(); gid_t getegid(void);
⑤setuid();
1.若进程具有超级用户权限,则将有效用户ID,实际用户ID和保存的设置用户ID都设置为uid
2.若进程无超级用户权限,且uid=进程的实际用户ID或者uid=进程的保存设置用户ID,那么就将进程的有效用户ID设置为uid.但是不改变进程的实际用户ID和保存 的设置用户ID。
3。若上述2个条件都不满足,则出错,errno置为EPERM,
⑥setgid(); int setuid(uid_t uid)
⑦setreuid(); int setreuid();(_uid_t__ruid,_uid_t__euid)
会修改ruid和euid,也某些情况下,也会修改suid。
而且不同的系统对setreuid也有不同的处理方式:
-在Solaris和Linux中,setreuid(geteuid(),getuid())可以实现ruid和euid的交换
-FreeBSD则会失败;
⑧setregid(); int setregid(__gid_t__rgid,__gid_t__egid)
⑨seteuid(); int seteuid(__uid_t__uid)
⑩setegid() inr setegid(__gid_t__gid)
6.解释器文件
7.system()
2.3.4的封装
8.进程会计
acct()
9.进程时间
times()
10.守护进程
会话session 标识sid
终端
setsid();
getpgrp();
getpgid()
setpgid();
11.系统日志
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
void vsyslog(int priority, const char *format, va_list ap);