
头文件:
#include <unistd.h>
函数定义:
int fork( void )
返回值:
子进程中返回0,父进程中返回子进程ID,出错返回-1
函数说明:
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。
‘fork()’函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。你可以通过检查‘fork()’函数的返回值知道哪个是父进程,哪个是子进程。父进程得到的返回值是子进程的进程号,而子进程则返回0。以下这个范例程序说明它的基本功能: //------------------------------ example 1 pid_t pid
switch (pid = fork())
{
case -1:
/* 这里pid为-1,fork函数失败 */
/* 一些可能的原因是 */
/* 进程数或虚拟内存用尽 */
perror("The fork failed!")
break
case 0:
/* pid为0,子进程 */
/* 这里,我们是孩子,要做什么? */
/* ... */
/* 但是做完后, 我们需要做类似下面: */
_exit(0)
default:
/* pid大于0,为父进程得到的子进程号 */
printf("Child's pid is %d\n",pid)
}//------------------------------ example 2#define TRUE 1
while (TRUE){ /* repeat forever */
type_prompt() /* display prompt on the screen */
read_command(command, parameters) /* read input from terminal */
if (fork() != 0){/* fork off child process */
/* Parent code. */
waitpid(1, &status, 0) /* wait for child to exit */
} else {
/* Child code. */
execve(command, parameters, 0) /* execute command */
}
}
这些是我再网上帮你找到的资料,看完之后,自己也学到不少,呵呵 ^^
希望它对你有点帮助吧,好好体会
还有一点就是进程的定义:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。说白了进程就是正在运行的程序,比如说有程序 p1 和 p2,当程序p1运行是就是进程p1 ,如果正在运行的是p2,那么就是进程p2
方法一:
pstree -p 14686(PID),可获取到nginx的四个子进程(或 ps -ef |grep nginx)
cat /proc/15178(PID)/status,其中threads即为线程(即进程)数
方法二:ps -eL -o pid,%cpu,lwp|grep -i pid
关于Linux *** 作系统:
Linux是一套免费使用和自由传播的类Unix *** 作系统,它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络 *** 作系统。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、 *** 作系统、进程等等对于 *** 作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
Linux是一款免费的 *** 作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的 *** 作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)