linux C 进程学习笔记

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值