您当前的位置:首页 > 互联网教程

子进程是什么

发布时间:2025-05-13 06:25:47    发布人:远客网络

子进程是什么

一、子进程是什么

问题一:什么是子程序?程序可以互相调用,就是说,锭一段程序a的中间,可以设置它执行另外的一段程序b,然后再回来继续执行本段程序a后边的部分,在其中调用的那另外的一段程序b就是这一程序a的子程序

问题二:什么是子进程和父进程在程序设计时,某一个具体的功能模块可以通过函数或是线程等不同的形式来实现。对于同一进程而言,这些函数、线程都是存在于同一个地址空间下的,而且在执行时,大多只对与其相关的一些数据进行处理。如果算法存在某种错误,将有可能破坏与其同处一个地址空间的其他一些重要内容,这将造成比较严重的后果。为保护地址空间中的内容可以考虑将那些需要对地址空间中的数据进行访问的操作部分放到另外一个进程的地址空间中运行,并且只允许其访问原进程地址空间中的相关数据。具体的,可在进程中通过CreateProcess()函数去创建一个子进程,子进程在全部处理过程中只对父进程地址空间中的相关数据进行访问,从而可以保护父进程地址空间中与当前子进程执行任务无关的全部数据。对于这种情况,子进程所体现出来的作用同函数和线程比较相似,可以看成是父进程在运行期间的一个过程。为此,需要由父进程来掌握子进程的启动、执行和退出。

问题三:什么是子程序,如何使用子程序呢???所谓子程序是能够完成一定功能的程序模块,其自身不能自动执行,而只能靠上一级程序调用执行,在结构化程序设计中,子程序是实现整个程序功能的基础;

子程序的执行至少包含调用及返回两个步骤。通过执行子程序调用指令,CPU会自动地保存当前程序断点(程序被打断的地方),然后转向执行被调用的子程序;当子程序执行完毕后,通过执行子程序返回指令使CPU返回断点处继续执行指令。希望我的回答对你有帮助!

问题四:子程序是什么?_?数据库里面也有这个概念子程序就是一段程序,完成一项功能,之所以叫子程序是相对主程序来说的!数据库中的子程序也有相关的,如处理字符串处理的子程序(函数)

问题五:linux系统的父子进程,fork(),分析下列的程序运行后,父进程和子进程的输出分别是什么?对于父进程 fork返回的值是子进程的pid号,不为0;输出 0;

子进程 fork返回值是 0;输出是2;子进程看自己的进程号用getpid(),看父进程号用getppid();

问题六:linux中,进程的子进程与进程的线程,有什么区别 haowawa586的例子不好, switch case语句和进程线程的概念没关系.

我拿Windows举例子吧,因为Linux的内核好像是没有线程概念的.

进程和线程的区别在于粒度不同,进程之间的变量(或者说是内存)是不能直接互相访问的,而线程可以,线程一定会依附在某一个进程上执行.

我举个例子,你在Windows下开一个IE浏览器,这个IE浏览器是一个进程.

你用浏览器去打开一个pdf, IE就去调用Acrobat去打开,这时Acrobat是一个独立的进程,就是IE的子进程.

而IE自己本身同时用同一个进程开了2个网页,并且同时在跑两个网页上的脚本,这两个网页的执行就是IE自己通过两个线程实现的.

值得注意的是,线程仍然是IE的内容,而子进程Acrobat严格来说就不属于IE了,是另外一个程序.

之所以是IE的子进程,只是受IE调用而启动的而已.

问题七:父进程用fork创建子进程之后,父子进程之间有什么关系? fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

1)在父进程中,fork返回新创建子进程的进程ID;

3)如果出现错误,fork返回一个负值;

在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

引用一位网友的话来解释fpid的值为什么在父子进程中不同。“其实就相当于链表,进程形成了链表,父进程的fpid(p意味point)指向子进程的进程id,因为子进程没有子进程,所以其fpid为0.

问题八:子程序是什么程序?就像你有一碗饭,子程序就是菜,组成了你的那碗饭的一部分,但是却也不依赖与你那碗饭!

问题九:请问C语言中所说的多线程编程是什么意思?父进程与子进程是什么意思?进程下会有很多线程,互不干扰,默认是单线程,从一个进程下打开另一个进程,那个就叫子进程

问题十:linux系统下父进程创建子进程后退出此时子进程叫什么不。若父进程退出,子进程尚未结束,则子进程会被init进程领养,也就是说init进程将成为该子进程的父进程。若希望父进程退出,子进程也退出的话,可以使用线程,因为若进程结束,则还没结束的线程一定会立刻结束。或者如楼上所说,用信号,用a...

二、C语言在linux如何让子进程不继承父进程的资源

1、我觉得这个问题你应该从另外一个方向去考虑,既然B不需要A的资源,那么就不要在fork之前打开这些资源。

2、如果你是要在A进程打开资源,运行了一些东西,得到了足够的信息才需要调用其他啊程序来做下一步内容,如果按照上面的方法就无法实现了话,你面对的实际是进程间同步和通信的问题。解决方法也很简单,随便通过一种通信机制(signal,pipe,等等),等A进程获得足够信息后,再通知B进程执行。比如

3、/* below code are running in parent, A*/

4、NOTIFY(B);/* use kill, send, etc. to notify child task B)

5、WAIT();/* for example, while(1) sleep();*/

三、在Linux下用C语言编程

1、如果你在DOS时代编写过程序,那么你也许知道在DOS下为了编写一个常驻内存的程序我们要编写多少代码了.相反如果在Linux下编写一个"常驻内存"的程序却是很容易的.我们只要几行代码就可以做到.实际上由于Linux是多任务操作系统,我们就是不编写代码也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号SHELL就会把我们的程序放到后台去运行的.这里我们"开发"一个后台检查邮件的程序.这个程序每个一个指定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警(通过机箱上的小喇叭来发出声音).后面有这个函数的加强版本加强版本

2、后台进程的创建思想:首先父进程创建一个子进程.然后子进程杀死父进程(是不是很无情?).信号处理所有的工作由子进程来处理.

3、/* Linux的默任个人的邮箱地址是/var/spool/mail/用户的登录名*/

4、#define MAIL"/var/spool/mail/hoyt"

5、printf("Fork Error:%s\n",strerror(errno));

6、if(kill(getppid(),SIGTERM)==-1)

7、printf("Kill Parent Error:%s\n",strerror(errno));

8、if((mailfd=open(MAIL,O_RDONLY))!=-1)

9、fprintf(stderr,"%s","\007");

10、你可以在默认的路径下创建你的邮箱文件,然后测试一下这个程序.当然这个程序还有很多地方要改善的.我们后面会对这个小程序改善的,再看我的改善之前你可以尝试自己改善一下.比如让用户指定邮相的路径和睡眠时间等等.相信自己可以做到的.动手吧,勇敢的探险者.

11、好了进程一节的内容我们就先学到这里了.进程是一个非常重要的概念,许多的程序都会用子进程.创建一个子进程是每一个程序员的基本要求!