现在的位置: 首页 > 综合 > 正文

进程控制

2018年04月21日 ⁄ 综合 ⁄ 共 1163字 ⁄ 字号 评论关闭

1.进程标识符

    每个进程都有一个非负整型表示的惟一进程ID。因为进程ID标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。

    虽然是惟一的,但是进程ID可以重用。当一个进程终止后,其进程ID就可以再次使用了。大多数UNIX系统实现延迟重用算法,使得赋予新建进程的ID不同于最近终止进程所使用的ID。

    专用进程:

     (1)交换进程。其ID为0,是调度进程。该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程。

     (2)init进程。其ID为1,在自举过程结束时由内核调用。该进程的程序文件是:/etc/init(早期版本) 或者/sbin/init(较新版本)。此进程负责在自举内核后启动一个UNIX系统。init通常读与系统有关的初始文件,并将系统引导到一个状态。init进程决不会终止。它是一个普通的用户进程,但是它以超级用户特权运行。

2.fork函数

    一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则新子进程的进程ID。

    子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。

     strlen计算不包括终止null字节的字符串长度,而sizeof则计算包括终止null字节的缓冲区长度。两者之间的另一个差别是,使用strlen需进行一次函数调用,而对于sizeof而言,因为缓冲区已用已知字符串进行了初始化,其长度是固定的,所以sizeof在编译时计算缓冲区长度。

     在重定向父进程的标准输出时,子进程的标准输出也被重定向。实际上,fork的一个特性是父进程的所有打开文件描述符都被复制到子进程中。父、子进程的每个相同的打开描述符共享一个文件表项。

    fork有下面两种用法:

    (1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的——父进程等客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。

    (2)一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec.

3.vfork函数

    它与fork函数一样,都用于创建一个子进程。它与fork函数有两点不同:

   1)vfork并不将父进程的地址空间完全复现到子进程中,因为子进程会立即调用exec(或exit)。相反,在子进程调用exec 之前,它在父进程的空间中运行。

   2)vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行。

4.exit函数

抱歉!评论已关闭.