Linux学习记录(七)---进程(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


上篇:进程(一)

3.ps和kill

ps

查看进程信息

部分参数:

  • a : 显示现行终端机下的所有程序,包括其他用户的程序

  • u: 以用户为主的格式来显示程序状况

  • x: 显示所有程序,不以终端机来区分

  • ajx

在这里插入图片描述

kill

向指定的进程发送信号

kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。

参数:

  • -a:当处理当前进程时,不限制命令名和进程号的对应关系;
  • -l: <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
  • -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
  • -s <信息名称或编号>:指定要送出的信息;
  • -u:指定用户。
  • 在这里插入图片描述

4.父子进程间的数据共享

fork之后两个地址空间区数据完全相同

后续各自进行了不同的操作

父进程:num‐‐
子进程:num++
物理地址:num, f_num,z_num

各个进程的地址空间中的数据是完全独立的 ----改变一个另一个的不变

对于同一个变量,读时共享 -----物理地址相同

写的时候分别在物理地址上拷贝一份变量进行单独读写 ----只改变自己的数据(拷贝走的)

父子进程之间可不可以通过全局变量通信? 不能,两个进程内存不能共享

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int i = 200;
int main()
{
	pid_t pid;
	pid = fork();//>0 return child pid
	if(pid == -1)
	{
		printf("create process failed\n");
		return -1;
	}
	else if(pid > 0)
	{
		i += 200;
		printf("&i = %p,i = %d\n",&i,i);
		printf("parent process pid is %d\n",getpid());
	}
	else if(pid == 0)
	{
		i += 400;
		printf("&i = %p,i = %d\n",&i,i);
		printf("child process pid is %d ppid is %d\n",getpid(),getppid());
	}
	return 0;
}

在这里插入图片描述

5.exec函数族

让父子进程来执行不相干的操作 能够替换进程地址空间的代码.text段 执行另外的程序,不需要创建额外的的地址空间 当前程序中调用另外一个应用程序

int execl(const char *path, const char *arg, ...
                       /* (char  *) NULL */);
// 指定执行目录下的程序       
/* path : 要执行程序的路径(最好是绝对路径) 变参arg : 要执行的程序需要的参数 第一位arg: 占位 后边的
arg: 命令的参数 参数写完之后:null 一般执行自己写的程序 */
                      
int execlp(const char *file, const char *arg, ...
                       /* (char  *) NULL */);
//执行PATH环境变量能够搜索到的程序
/* file :执行的命令名字 第一个arg:占位 后边的arg:命令的参数 参数写完之后:NULL 执行系统自带的程
序:/bin/xx */ //ps aux

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[]);

返回值:

  • 如果函数运行成功不返回

  • 如果执行失败,打印错误信息,退出子进程

它们的一般规律如下:

  • l (list) 命令行参数列表

  • p (path) 搜素file时使用path变量

  • v (vector) 使用命令行参数数组

  • e (environment) 使用环境变量数组,不使用进程原有的环境变量,设置新加载程序运行的环境变量

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值