⑴ linux创建进程 pid
你用了pthread库,在链接的时候要加上
gcc -lpthread 1.c -o 1
即可
子进程(对应pid==0语句)调用pthread接口创建线程,在县城内将value赋值5,然后打印 CHILD: value=%d\n 此时value = 5
父进程 (对应 pid > 0 语句),等待子进程执行完成后(wait语句),打印PARENT: value=%d\n ,此时value = 0
对于你补充问题的回答:
线程是在子进程里创建的,它只改变了子进程的value (子进程和父进程的value处在不同的地址空间,互相没有关系,而子进程和它所创建的线程是在同一地址空间,所以线程可以改变子进程的value), 父进程没有创建线程,因此它的值不会被改变。
⑵ 在LINUX环境下如何创建一个新的进程
使用fork系统调用可以创建一个进程,fork之后可以调用exec接口用来执行新进程的代码。
建议看看《UNIX高级环境编程》。
⑶ linux进程由什么函数创建创建过程中内核为其所提供的服务过程
用fork函数创建 内核把原来程序的代码段和数据段复制到新的进程中
⑷ Linux启动一个进程的过程
Linux 中的每个进程都存在于“进程树”中。你可以通过运行 pstree 命令查看进程树。树的根是 init,进程号是 1。每个进程(init 除外)都有一个父进程,一个进程都可以有很多子进程。
所以,假设我要启动一个名为 ls 的进程来列出一个目录。我是不是只要发起一个进程 ls 就好了呢?不是的。
我要做的是,创建一个子进程,这个子进程是我(me)本身的一个克隆,然后这个子进程的“脑子”被吃掉了,变成 ls。
开始是这样的:
然后运行 fork(),生成一个子进程,是我(me)自己的一份克隆:
然后我让该子进程运行 exec("ls"),变成这样:
当 ls 命令结束后,我几乎又变回了我自己:
在这时 ls 其实是一个僵尸进程。这意味着它已经死了,但它还在等我,以防我需要检查它的返回值(使用 wait 系统调用)。一旦我获得了它的返回值,我将再次恢复独自一人的状态。
上文提到的“脑子被吃掉”是什么意思呢?
进程有很多属性:
当你运行 execve 并让另一个程序吃掉你的脑子的时候,实际上几乎所有东西都是相同的! 你们有相同的环境变量、信号处理程序和打开的文件等等。
唯一改变的是,内存、寄存器以及正在运行的程序,这可是件大事。
为何 fork 并非那么耗费资源(写入时复制)
你可能会问:“如果我有一个使用了 2GB 内存的进程,这是否意味着每次我启动一个子进程,所有 2 GB 的内存都要被复制一次?这听起来要耗费很多资源!”
事实上,Linux 为 fork() 调用实现了写时复制 on write,对于新进程的 2GB 内存来说,就像是“看看旧的进程就好了,是一样的!”。然后,当如果任一进程试图写入内存,此时系统才真正地复制一个内存的副本给该进程。如果两个进程的内存是相同的,就不需要复制了
当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在内核里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从内核中取出子进程的退出信息,并清空该信息在内核中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。
当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在内核中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。
⑸ linux怎样创建进程
你是玩软件还是编程
编程的话方法很多:调用fork,system等.
⑹ linux是怎样创建进程的
这个说起来太复杂了。不是一句两句的。LINUX创建进程和WINDOWS创建进程机制很大程度上是相同的。不同点在于。内核对信息处理次序优先级会发生歧义。一般都是输入系统发出信息后,通过总线送到CPU处理,这是CPU就会给预处理和正在处理的数据编号。形成一个进程。然后再通过总线将数据传回到输出系统。这个真不是一句两句能说明白的。恐怕我一晚上也解释不明白。要想很好的理解,就不要去管什么操作系统了。所有操作系统都一样。直接看微机组成原理吧!网上很多电子书。你把这块懂了。相信以后的汇编编程也就好弄点。
祝你好运。