Linux下进程的相关函数和指令

Linux下进程的相关函数和指令

指令

 ps —— 查看系统中有哪些进程
 ps -aux —— 查看系统中全部进程
 ps -aux|grep A —— 查找A进程
 top —— 任务管理器界面

getpid函数
获取当前进程的程序标识符

 #include <sys/types.h>
 #include <unistd.h>

 pid_t getpid(void); ——获取进程的进程标识符 
 pid_t getppid(void);——获取父进程的进程标识符

fork函数
从fork()函数开始建立一个进程同原进程一同运行后续指令

 #include <sys/types.h>
 #include <unistd.h>
 
 pid_t fork(void); —— 建立子进程

fork函数一次调用,两次返回

  • 返回值为0 —— 代表当前进程为子进程
  • 返回值为非负数 —— 代表当前进程为父进程
  • 返回值为-1 —— 调用失败

fork() 函数属于父进程将后续代码拷贝一份给子进程,两进程的数据不互相影响并且同时运行

vfork() 函数子进程直接使用父进程存储空间,不拷贝,同时保证子进程先运行并退出后,父进程才执行。

  • 子进程退出需使用exit()函数正常退出否则会导致数据错乱

    • exit(0) —— 程序正常退出
    • exit(非零) —— 程序异常退出

wait函数
父进程等待子进程退出,并收集子进程退出状态

 #include <sys/types.h>
 #include <sys/wait.h>

 pid_t wait(int *wstatus);

若子进程比父进程先结束,而父进程未调用wait()函数收集子进程状态,则子进程变为僵尸进程

  • 僵尸进程将会占用系统内进程号,如果产生大量僵尸进程则会因为没有进程号无法创造新进程

若父进程比子进程先结束,子进程变为孤儿进程,将由init(pid = 1)来收留

使用WEXITSTATUS()来解析通过wait()得到的子进程传回来的状态

exec函数
在进程中调用可执行文件,调用成功后不执行后续进程

#include <unistd.h>

int execl(const char *path, const char *arg, const char *arg...  /* (char  *) NULL */);
  • 内容解析

     -  const char *path —— 想要执行文件的路径
     - const char *arg —— 可执行文件名
     - ... —— 执行文件所需要的参数
     - (char  *) NULL —— 结尾必须以NULL结束
    

如 execl("/bin/ls",“ls”,"-l",NULL);

perror()函数:查看错误原因

system函数
在进程中调用可执行文件,调用成功后继续执行后续进程

#include <stdlib.h>

int system(const char *command);
  • 返回值为进程的状态值 —— 成功
  • 返回值为127 —— sh不能执行
  • 返回值为-1 —— 失败

popen函数
调用可执行文件,并可以记录下调用的数据

#include <stdio.h>

FILE *popen(const char *command, const char *type);
  • 内容解析
    - const char *command —— 可执行文件名
    - const char *type —— 读写类型

    • “r” —— 连接到 command 的标准输出
    • “w” —— 连接到 command 的标准输入

配合使用fread()函数可将执行的数据记录下来,如下

 char ret[1024] = {0};
 FILE *fp;

 fp = popen("ps","r");
 fread(ret,1,1024,fp);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值