关于进程的一些命令
ps
可以查看哪些进程正在执行
ps -C 命令行 //通过命名来产看该命令执行后的进程信息
top
top命令实时显示系统的进程状态,包括显示CPU利用率,进程状态,内存利用率等许多系统信息,top命令一旦运行就会持续不断地更新内容。
按P键,根据CPU使用时间的多少排序。
按M键,根据内存的使用情况排序。
按T键,根据进程的执行时间的多少排序。
free
显示系统内存的使用情况,包括内存总量,已经使用内存数量,空闲内存数量等信息。
kill
kill pid //向指定的进程发送终止运行信号,进程将自行结束并处理好相关事务,属于安全结束。(默认信号为SIGTERM)
kill -9 pid //参数-9为SIGKILL信号,是强制结束。
相关函数
fork() //创建进程,创建失败返回-1,成功父进程中返回子进程pid,子进程中返回0;
特点:调用一次返回两次,相同但是独立的地址空间,并发执行,共享文件
函数 | 接口 |
---|---|
pid_t getpid() | 获取当前进程的pid |
pid_t getppid() | 获取当前进程父进程pid |
执行函数 exec()
一般使用时有fork创建子进程后,在子进程中执行,替换子进程中的代码,子进程的PID不变。
ulimit -a 可以查看linux系统可以创建多少个进程。
ulimit -u 进程数 //可以修改创建进程数
分类 | 函数 |
---|---|
字符串数组参数 | 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[]); |
可变参数 | int execl(const char *path, const char *arg, …) int execlp(const char *file, const char *arg, …) int execle(const char *path, const char *arg, …, char * const envp[]); |
- 返回值 成功不返回,失败返回-1
- 头文件 unistd.h
- exec函数命名规律
字符 | 含义 |
---|---|
v | 第二个参数是数组 |
l | 第二个参数之后是变参 |
p | 第一个参数是文件名 |
e | 最后一个参数是环境变量 |
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
extern char ** environ;
int main(int argc, char*argv[]){
printf("%s,pid %d\n",argv[0],getpid());
execlp("ps","ps","-a","-o","pid,ppid,cmd,",0);
//execl("/bin/ps","ps","-a","-o","pid,ppid,cmd,",0);
//execle("/bin/ps","ps","-a","-o","pid,ppid,cmd,",0,environ);
char * args[] = {"ps","-a","-o","pid,ppid,cmd",0};
//excv("/bin/ps",args);
//execve("/bin/ps",args,environ);
//execvp("ps",args);
printf("%s,pid %d\n",argv[0],getpid());
}
执行结果,被替换之后的是没有输出的。
进程结束
exit 结束程序,其参数是返回os,表示了一个进程的结束,删除进程的内存空间。
return 是语言级别的,它表示了调用堆栈的返回,return饭后函数值并退出函数。
abort函数解释http://www.cplusplus.com/reference/cstdlib/abort/?kw=abort)