Linux环境编程——进程(一)

进程相关基本概念

在这里插入图片描述

进程和程序

在这里插入图片描述

Linux下的进程结构

在这里插入图片描述

Linux系统中进程类型

在这里插入图片描述
批处理进程如脚本

进程状态

在这里插入图片描述
在这里插入图片描述

进程的模式

在这里插入图片描述
int 0x80是中断

Linux下的进程管理

在这里插入图片描述
命令:ps aux 查看所有进程信息
在这里插入图片描述
1号进程是所有进程的祖先进程(init 进程)
SATA表示进程的状态

命令:ps -ef 与ps aux的区别是显示的信息要少一点,不显示状态了,但是可以看到父子进程关系
在这里插入图片描述
命令:pstree
在这里插入图片描述
命令:top
在这里插入图片描述
查看当前进程运行状态,类似Windows的任务管理器

进程的创建

在这里插入图片描述

进程创建实验

#include <unistd.h>

int main(void)
{
	pid_t  pid;

	// 思考不加上换行后会有什么情况出现
	printf("Process Creation Study");
	
	pid = fork();

	switch(pid) {
		case 0:
			printf("子进程在运行,pid是%d,父进程的pid是%d\n", getpid(), getppid());
			break;
		case -1:
			perror("Process creation failed\n");
			break;
		default:
			printf("父进程在运行,创建的子进程PID是%d,我的PID号是%d\n", pid, getpid());
			break;
	}

	printf("success!\n");
    
	exit(0);
}

这里由于Clion的原因,代码的执行在Linux上运行更更看出准确的实验结果:
在这里插入图片描述
注意:

  • 父进程要是想看到创建的子进程的pid号只有fork()执行的时候的一次机会,只能保存当时返回的pid才知道,后续再次执行就会创建不一样的
  • 父进程退出后终端立刻出现
  • 如果父进程先比子进程先退出,此时子进程被称为孤儿进程,被init进程(pid为1)接管回收
    如:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这些数字目录,一个目录就是一个进程号,进程死掉后内存虽然不在了,但是这里还是保存的,因此还需要清楚proc目录下

实验2

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

int main(void)
{
	pid_t   pid;
	char *  msg;
	int     k;

	printf("Process Creation Study\n");

	pid = fork();

	switch(pid) {
		case 0:
			msg = "Child process is running";
			k = 3;
			break;
		case -1:
			perror("Process creation failed\n");
			break;
		default:
			msg = "Parent process is running";
			k=5;
			break;
	}
	
	while(k > 0)
	{
		puts(msg);
		sleep(1);
		k--;
	}

	exit(0);
}

在这里插入图片描述
进程复制:堆空间,栈空间、代码、全局变量都复制了,但两个进程共用内核。

在这里插入图片描述
在这里插入图片描述
核心函数是execl();

实验

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>

int main()
{
	int ret;
	pid_t pid;
	//char *buf[] = {"df","-h",NULL};
	
	pid = fork();
	if(pid == 0){
//		ret = execlp("df","df",NULL);
		ret = execl("/bin/df","abc","-h",NULL);
//		ret = execl("./arg","abc","-h",NULL);
		//ret = execv("/bin/df",buf);
		if(ret == -1){
			perror("execl");
			exit(1);
		}
	}

	getchar();
	wait(NULL);
	printf("success!\n");
}

df命令用于显示磁盘空间的使用情况
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Asita_c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值