每个进程都有各自独立的虚拟地址空间,空间的大小与所基于的硬件体系结构有关。虚拟空间中各区代表的意义,代码段存储指令序列和只读数据,多个进程实例可共享代码段。数据段用来存放全局变量和静态变量。堆区域用于程序的动态内存管理,new或者malloc申请的内存就位于堆中。栈用来存放进程运行过程中的局部变量,函数返回地址,参数和进程上下文环境。
线程:引入进程是为了解决程序并发执行的问题,而引入线程是为了减少程序并发所带来的时间和空间的开销,线程是比进程更小的单位,一个进程至少有一个线程,线程是 *** 作系统进行调度的基本单位,线程基本上不占用系统资源,线程与其他同属一个进程的线程共享该进程所占有的资源。
linux是个系统,支持各种服务,服务可以开启多进程,进程可以开启多线程
一般linux系统上,使用fork来启动多进程。以实际代码解答
#include<unistd.h>
#include<stdio.h>
int main(int argc, char ** argv )
{
int pid = fork()
if (pid <0)
{
printf("error!")
}
else if( pid == 0 )
{
printf("This is the child process!")//此处就是子进程执行
}
else{
printf("This is the parent process! child process id = %d", pid)//此处是父进程.
}
return 0
}
fork 函数的特点就是一次调用,两次返回。并且返回给子进程和父进程的返回值不同,对于子进程返回为0,对于父进程返回为子进程的PID号
系统调用fork后进程就分叉了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)