一、进程的优先级
取值范围:-20 ~ 19. 值越小,优先级越高
二、调整优先级的方法
(1) 启动进程前调整: nice -n (n指优先级)
(2) 程序运行过程中调整: renice 优先级 -p pid(进程号)
(3) top—> r —> 输入pid —> 输入nice值 —> q (退出)
shift > 向下翻屏 ; shift < 向上翻屏。
三、进程等待
为了解决僵尸进程
pid_t wait(int *status)
status:子进程的退出码(8 ~ 16位,范围:0 ~ 255)
WIFEXITED(sts):如果正常退出,则返回真,才会有退出码;
WEXITSTATUS(status):得到子进程的退出码;
WIFSIGNALED(status):如果信号使进程结束,则返回真;
WTERMSIG(status):获得使该进程结束的信号值;
返回值:被回收的子进程的进程ID
//指定某一特定子进程被回收
pid_t waitpid(pid_t pid,int *status,int flag)
pid:
>0:等待pid子进程的死亡;
=0:调用者所在进程组的任何一个子进程;
=-1:任何一个子进程;
<-1:|pid|进程组的任何一个子进程。
flag:WNOHANG 如果没有子进程死亡,直接返回0;
wait(NULL) //阻塞,直到有一个子进程死亡,并且回收到子进程时才返回
四、进程等待
//用file指定的程序替换当前进程
int execvp(const char *file(可执行程序的名字),char *const argv[](main函数的命令行参数))
返回值:成功,没有返回值;失败,返回-1.
五、环境变量
1、终端下定义本地变量,该变量只能在当前进程中使用,不能在子进程中使用;
2、将本地变量变成环境变量. export name 环境变量可以在本进程和子进程中使用,但不能在父进程中使用;
3、unset name 删除环境变量;
4、env 查看系统所有的环境变量;
5、系统会为我们定义很多环境变量;
/etc/profile 系统;
~/.bash_profile 自己;
先执行系统的环境变量,再执行自己的环境变量;
6、获得环境变量值 char *getenv(const char *name);
7、设置环境变量 int putenv(const char *name);
8、获取全部环境变量 main函数的第三个参数 char *envp.
影响服务器性能的四大杀手:
数据拷贝、环境切换、内存分配、锁竞争