进程概论
进程标识及用户id、组id
1 2 3 4 5 6 7 8 9 10
| #include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { printf("pid:%d ppid:%d euid:%d egid:%d\n",getpid(),getppid(),geteuid(),getegid()); return 0; }
|
Linux高级权限控制
1 2 3
| chmod u+s a.out #设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权 chmod g+s /home/xxxx #该权限只对目录有效.目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组. chmod o+t /temp #(粘滞位) 该位可以理解为防删除位.一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件,但同时不能删除文件,则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限,也不能删除该文件。
|
进程状态
进程结构
-数据段:全局变量、常数以及动态数据分配的数据空间。数据段分为普通数据段(包括可读可写/只读数据段,存放静态初始化的全局变量或常亮)、BSS数据段(存放未初始化的全部变量)以及堆(存放动态分配的数据)
-代码段:存放的是程序代码的数据
-堆栈段:存放的是子程序的返回地址,子程序的参数以及程序的局部变量 ###
Linux下的进程管理 | 命令 | 含义 | | ------- |
-------------------------------------------- | | ps | 查看系统中的进程 |
| top | 动态显示系统中的进程 | | nice | 按用户指定的优先级运行 | |
renice | 改变正在运行进程的优先级 | | kill |
向进程发送信号(包括后台进程) | | crontab |
用于安装、删除或者列出驱动cron后台进程的任务 | | bg |
将刮起的进程放到后台运行 |
TIP:
R |
正在执行中 |
S |
静止状态 |
T |
暂停执行 |
Z |
不存在但暂时无法消除(僵尸) |
#进程的创建 ## system函数
1 2 3
| #include<stdlib.h> int system(const char *string);
|
## fork函数
1 2 3
| #include<unistd.h> pid_t fork(void);
|
##
exec函数族
1 2
| int execl(const char *path,const char *arg,...)
|
# 进程控制与终止 ## 进程的控制
1 2 3 4 5
| #include<sys/types.h> #include<sys/wait.h> pid_t wait(int *status); pid_t waitpid(pid_t pid,int *status,int options);
|
WIFEXITED(status) 如果子进程正常结束,返回非0值,
WEXITSTATUS //如果WIFEXITED非0,它返回子进程的退出码
1 2 3 4 5
| #include<stdlib.h> #include<unistd.h> sched_yield() void _exit(int status); void exit(int status);
|
进程的终止
- main函数的自然返回
- 调用exit函数
- 调用_exit函数
- 调用abort函数
- 调用能导致进程周知的信号,Ctrl+s Ctrl+c
守护进程(Daemon)
启动方式
- 创建子进程,父进程退出
- 在子进程中创建新对话(setuid)
- 重设文件掩码umask(0)
- 改变当前目录为根目录
- 关闭不需要的文件描述符