unix 环境高级编程-1.6-程序和进程

1.6、程序和进程

 

  1. 程序:存放在磁盘上,处于某个目录中的可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使之执行。
  2. 进程和进程id:程序的执行被称为进程(process)。unix确保每个进程都有一个唯一的数字标识符。称为进程ID。进程id总是非负数。

看如下例子:pro_1-4.c

#include "apue.h"

int main(void)
{
        printf("hello world from process ID %d\n",getpid);
        exit(0);

}


编译:gcc -o pro_1-4 pro_1-4.c

运行:./pro_1-4

 

结果:

     3.进程控制:有三个用于进程控制的主要函数:fork,exec,和waitpid。(exec有六种变体);

 

示例:程序pro_1-5.c

#include "apue.h"
#include <sys/wait.h>

int main(void)
{
        char buf[MAXLINE];
        pid_t pid;
        int status;

        printf("%%");//print prompt
        while(fgets(buf,MAXLINE,stdin)!=NULL){
            if(buf[strlen(buf)-1]=='\n')
            buf[strlen(buf)-1]=0;
            if((pid=fork())<0)
                {
                err_sys("fork error");
                }else if(pid=0){
                        execlp(buf,buf,(char*)0);
                        err_ret("couldn't execute:%",buf);
                        exit(127);
                }
           if((pid=waitpid(pid,&status,0))<0)
                err_sys("waitpid error");
           printf("%%");

        }
        exit(0);
}

运行结果:

 

程序解释:

  • 函数fgets从标准一行行的读,一终止符结束,fgets返回一个null指针,循环终止,进程终止。
  • fgets是以换行符终止,后随一个null字节,所以用strlen计算长度。二execlp要求一null换行。
  • fork创建一个新进程。新进程是调用进程的复制品,调用进程是父进程。新创建的为子进程。fork像父进程返回进程ID,子进程则返回0,以内fork创建一新进程。所以说,他被调用一次,但返回两次。

4.线程和线程ID

通常,一个进程只有一个控制线程。同一时刻只执行一组机器指令。对于某些问题,如果不同部分,个使用一个控制线程。那么整个问题解决起来就容易多了。

在一个进程内所有线程,共享一个地址空间,文件描述符,栈以及进程相关的属,因为,他们能访问同意存储区,所以个线程在访问共享数据的同时,需要采取同步措施,避免数据不一致性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值