Linux 如何创建进程函数与查看进程_linux java进程 查看热点函数

进程创建函数

进程就是pcb,意味着创建一个进程,就是创建一个pcb

pid_t fork(void)

–通过复制调用进程(父进程)创建一个新的进程(子进程)
创建一个新的pcb,然后从父进程pcb中复制了很多数据过来复制的主要信息有内存指针,程序计数器,上下文数据。

内存指针:子进程与父进程运行的代码其实是一样的–指向同一块物理内存中的数据及指令
程序计数器/上下文数据:子进程被创建出来后,运行位置与父进程是完全一样的,下一步即将执行的指令都是从创建子进程成功之后才开始的。
创建一个子进程出来是跟父进程做的事情是一样的,因为他们的运行的代码和数据以及当前的运行位置都是一样的。(子进程创建前父进程的代码也会被子进程复制)
Linux 如何创建进程函数与查看进程_linux java进程 查看热点函数_第1张图片
在这里插入图片描述
fork函数体伪代码

fork()
{
	...
	创建子进程
	...
	父进程和子进程都会调用return语句
	因此就可以做到各有各的返回值
	父进程返回子进程的pid
	子进程返回的是0(区分父子进程)
	return pid;
	在fork之外就可以通过返回值区分父子进程
}

但是这个fork()函数的返回值对于父子进程是不一样的
在父进程中返回创建的子进程pid
在子进程中返回的是0
所以可以根据返回值来分别执行父子进程的工作
通常根据fork的返回值进行代码的分流,让父子进程进入不同的判断执行完成不同的功能

pid_t getpid(void)

获取调用者进程的id
代码中的pid指的是fork函数的返回值
Linux 如何创建进程函数与查看进程_linux java进程 查看热点函数_第2张图片
Linux 如何创建进程函数与查看进程_linux java进程 查看热点函数_第3张图片

pid_t vfork(void)

该函数和fork函数一样都是在已有进程中创建一个新的进程,区别主要是:对于fork函数来说,父子进程的执行次序是不确定的,但是对于vfork函数来说会保证子进程先运行,在它调用exec函数或者exit函数之后父进程才可能调度运行,子进程在调用exec函数或exit函数之前与父进程数据是共享的,也就是共用一个虚拟地址空间。共用了同一块虚拟地址空间,就不能同时运行,不然会造成栈混乱,因此子进程先运行,结束后会让所有函数出栈,继续执行父进程
Linux 如何创建进程函数与查看进程_linux java进程 查看热点函数_第4张图片

你可能感兴趣的:(java,linux,开发语言)