Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28502
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-20 12:05
个人简介

.

文章分类
文章存档

2015年(1)

2014年(9)

我的朋友

分类: LINUX

2014-11-06 12:39:29

1.进程和程序的区别:进程是程序运行后的活动,程序是静态的(放在磁盘上的,运行起来后叫进程).
2.进程调度中的调度算法:
先来先服务调度算法、短进程优先调度(哪个进程需要的时间短,哪个先来)、高优先级优先调度算法(注意查看该平台下优先级说明,是优先级大先调度还是相反)、时间片轮转法(按照时间片段如1s来循环执行等待的进程)。
3.死锁:多个进程因竞争资源形成僵局(需要外力作用来解决)。

创建进程函数fork和vfork的区别:
1.分别创建子进程后,对于fork,CPU随机执行父进程或者子进程;而对于vfork,CPU则会先执行子进程。
2.fork创建子进程后,子进程拷贝源代码资源,父子资源互不影响。而vfork 父子共享资源。


exec函数族
1、execl
int execlp(const char*path,执行程序所需的参数)
eg:
#include
main()
{
    execl("/bin/ls","ls","-al","/etc/passwd",(char*)0);
}
2、execl
eg:
#include
main()
{
    execlp("ls","ls","-al","/etc/passwd",(char*)0);
}
两者的差别在于execl中的path要包含完整路径名,而execlp中的参数path不包含路径,直接在path变量中查找。注意要以空指针结束!
3、execv
int execv(const char *path,char*const argv[])
和上述不同点在于用argv[]这一数组来包含执行程序所需要的参数。
eg:
#include
main()
{
    char *argv[]={"ls","-al","/etc/passwd",(char*)0};
    execv("/bin/ls",argv);
}
优点方便管理,更多参考转载的那篇文章!
4、system函数
#inlcude
int system(const char*string)
功能:调用fork产生子进程,由子进程来调用/bin/sh -c string来执行参数

sting所代表的命令。
eg;
#include
void main()
{
    system("ls -al /etc/passwd")
}
注意是在子进程中作用的。


进程等待:
#include
#include
pid_t wait(int*status)
功能:阻塞该进程(父进程,直到某个子进程退出),因为在用fork创建一个新的进程时,父子进程执行顺序是一致的,所以父进程需要等待子进程退出后再退出。

点击(此处)折叠或打开

  1. #include<sys/types.h>
  2. #include<sys/wait.h>
  3. #include<unistd.h>
  4. #include<stdlib.h>
  5. void main()
  6. {
  7.     pid_t pc,pr;
  8.     pc=fork();
  9.     if(pc==0) /*if the process is child's*/
  10.     {
  11.     printf("this is child process with pid of%d\n",getpid());
  12.     sleep(3);
  13.     }
  14.     else if(pc>0) /*if the process is parent's*/
  15.     {
  16.     pr=wait(NULL);
  17.     printf("i catched a child proccess %d\n",pr);
  18.     }
  19.     exit(0);
  20. }











最后做了下有等待的fork、无等待fork、以及vfork
阅读(612) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~