Linux 进程控制(二)

2.进程控制

1)进程控制

fork

    一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

  • fork函数的返回值
    • >0,父进程的返回值
    • =0,子进程的返回值
  • 子进程创建成果后,代码的执行位置
    • 父进程执行到哪儿,子进程开始执行
  • 父子进程的执行顺序
    •  不一定,谁抢到cpu谁执行
  • 如何区分父子进程:
    • 通过fork函数的返回值

getpid/getppid

  • getpid 得到当前进程的PID
  • getppid  得到当前进程的父进程的PID
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <iostream>
using namespace std;
int main() {
	pid_t pid;
	for (int i = 0; i < 4; ++i) {
		cout << "------------ i = " << i << endl;
	}
	pid = fork();
	//父进程
	if (pid > 0) {
		cout << "parent process,pid = " << getpid()<<endl;
	}
	//子进程
	else if (pid == 0) {
		cout << "child process,pid = " << getpid() << "    ppid = " << getppid() << endl;
	}
	for (int i = 0; i < 4; ++i) {
		cout << " i = " << i << endl;
	}
	return 0;
}

程序输出:

------------ i = 0
------------ i = 1
------------ i = 2
------------ i = 3
parent process,pid = 8340
 i = 0
 i = 1
 i = 2
 i = 3
child process,pid = 8344    ppid = 1
 i = 0
 i = 1
 i = 2
 i = 3
 

2)进程相关的命令 

  • ps
    • ps aux | grep "xxx"
    • ps ajx 
  • kill 向指定的进程发送信号
    • 查看信号:kill -l
    • 杀死某个进程:kill -9(SIGKILL) PID

3)进程共享

  • 测试父子进程是不是共享全局变量
    • 刚fork出来之后:两个地址空间用户区数据完全相同
    • 后续各自进行了不同的操作:各个进程的地址空间中的数据是完全独立的。
    • 读时共享,写时复制
    • 父子进程间能否使用全局变量通信?
      • 不能,两个进程间内存不能共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值