当前位置: 首页 > news >正文

做毛绒玩具在什么网站上找客户网络营销师证书含金量

做毛绒玩具在什么网站上找客户,网络营销师证书含金量,有关网站建设的网站,大丰做网站价格一.exec函数族 1.exec函数族的应用 在shell下敲shell的命令都是在创建shell的子进程。而我们之前学的创建父进程和子进程代码内容以及通过pid与0的关系来让父子进程执行不同的代码内容都是在一个代码文件里面,而shell是如何做到不在一个文件里面写代码使之成为子进…

一.exec函数族

1.exec函数族的应用

        在shell下敲shell的命令都是在创建shell的子进程。而我们之前学的创建父进程和子进程代码内容以及通过pid与0的关系来让父子进程执行不同的代码内容都是在一个代码文件里面,而shell是如何做到不在一个文件里面写代码使之成为子进程的呢?

        答案是使用了exec函数族

假如现在有段在shell下敲的名为test的代码,执行过程为:父进程(shell)fork()出一个子进程后,子进程调用exec函数族执行test,此时原进程的内容就会被覆盖,执行test的内容,就实现了创建新的进程并在该进程中执行不同的程序;

这些函数允许将当前进程内容替换为新的可执行文件,从而实现进程的代码和数据的切换。

进程调用exec函数族执行某个程序

进程当前内容被指定的程序替换

实现让父子进程执行不同的程序 :

●父进程创建子进程  

●子进程调用exec函数族  

●父进程不受影响

2.exec函数族的一些常见成员

(1)excel / excelp(熟练)

#include  <unistd.h>
int execl(const char *path, const char *arg, …);
int execlp(const char *file, const char *arg, …);

 成功时执行指定的程序;失败时返回EOF

 path   执行的程序名称,包含路径

 arg…  传递给执行的程序的参数列表

 file   执行的程序的名称,在PATH中查找(PATH为linux的环境变量,添加到系统的环境变量后,在系统的任意路径都能直接输入程序名称执行,不用输入路径)

execl : 以参数列表的方式执行新程序。需要指定可执行文件的路径,以及传递给新程序的参数列表。

进程创建 – execl(p) – 示例:

 ⭕ 执行ls命令,显示/etc目录下所有文件的详细信息

#include <stdio.h>
#include <unistd.h>int main(int argc, const char *argv[])
{if(execl("/bin/ls","ls","-a","-l","/etc",NULL)<0){perror("execl");}return 0;
}
#include <stdio.h>
#include <unistd.h>int main(int argc, const char *argv[])
{if(execlp("ls","ls","-a","-l","/etc",NULL)<0){perror("execl");}return 0;
}

分析:

execl中:

"/bin/ls"为执行的程序名称,在/bin路径下有个叫ls的程序;

"ls"是第0个参数,第0个参数通常是程序的名称,第0个参数必须要写,虽然它没有使用;

"-a","-l","/etc"都是传递给程序的参数;

execlp中:除了直接传入程序名称在系统路径中查找以外,其余和execl相同;

注意:两个函数区别在于execlp不需要写文件名全路径,在系统路径PATH查找

            最后一个参数都必须用空指针(NULL)作结束

            进程当前内容被指定的程序替换,但进程号不变

            第0个参数必须要写,虽然它没有使用

(2)execv / execvp (熟练)

  #include  <unistd.h>int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);

成功时执行指定的程序;失败时返回EOF  ;

arg… 封装成指针数组的形式;

这两个就是把参数列表封装成了一个数组;

进程创建 – execv(p) – 示例

⭕执行ls命令,显示/etc目录下所有文件的详细信息

伪代码如下:

  char  *arg[] = {“ls”, “-a”, “-l”, “/etc”, NULL};if  (execv(“/bin/ls”, arg) < 0){perror(“execv”);}  if  (execvp(“ls”, arg) < 0){perror(“execvp”);}  

注意:末尾的NULL照样不能省;

3.system(exec的简略版本) (熟练)

内部使用了 exec 函数族的一种方式来执行 shell 命令

#include  <stdlib.h>
int system(const char *command);

成功时返回命令command的返回值;失败时返回EOF

当前进程system 函数会创建一个子进程来执行 shell 命令,等待执行结束后才继续执行

system 函数一般用来执行shell命令,并不适用于直接执行可执行程序,一般使用exec函数族来执行可执行程序。

#include <stdlib.h>int main(int argc, const char *argv[])
{system("/bin/ls -a -l /etc");return 0;
}

二.守护进程

1.守护进程的特点(了解)

(1)守护进程

守护进程(Daemon Process)是Linux三种进程类型之一;

是 Linux 中的后台服务进程;

是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件;

(2)守护进程特点

始终在后台运行

独立于任何终端

周期性的执行某种任务或等待处理特定事件

它是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭

举例:

http 服务的守护进程叫 httpd,mysql 服务的守护进程叫 mysqld。

2.会话、控制终端(了解)

进程组(Process Group): 进程集合,每个进程组有一个组长(Leader),其进程 ID 就是该进程组 ID。

会话(Session): 进程组集合,每个会话有一个组长,其进程 ID 就是该会话组 ID。

控制终端(Controlling Terminal):每个会话可以有一个单独的控制终端,与控制终端连接的 Leader 就是控制进程(Controlling Process)。

即进程的集合为进程组,进程组集合为会话组 ,会话组的控制终端为控制进程;

3.创建守护进程流程(熟练)

简便地创建守护进程: nohup 命令

nohup  xxxx  &

nohup在某些情况下是方便的,但是需要创建更稳定和更高级需求的守护进程时并不推荐nohup;

接下来我们介绍学习另外的方法:

(1)创建子进程,父进程退出

 if (fork() > 0)  
{exit(0);
}

子进程变成孤儿进程,被init进程收养  

子进程在后台运行

(2)子进程创建新会话

setsid函数:
 

#include <unistd.h>pid_t setsid(void);

成功:返回调用进程的会话ID;失败:-1,设置errno。

作用:用于创建一个新的会话,并将调用进程设置为这个新会话的领导进程(session leader),同时也是一个新进程组的组长。这使得进程完全脱离原始的控制终端,而且它的子进程将成为这个新会话和进程组的成员
调用了setsid函数的进程,既是新的会长,也是新的组长;

if(setsid()<0)
{perror("setsid:");exit(-1);
}

此时

子进程成为新的会话组长  

子进程脱离原先的终端

(3)更改当前工作目录

守护进程一直在后台运行,其工作目录不能被卸载要具有稳定性,因此最好重新设定一个稳定的工作目录;

chdir("/");
chdir("/tmp");

(4)重设文件权限掩码

umask() 是一个用于设置文件创建权限掩码的系统调用函数。当进程创建新文件或目录时,会根据当前的文件创建权限掩码来确定新文件的权限;

if(umask(0)<0)
{exit(-1);
}

 文件权限掩码设置为0;

只影响当前进程创建的新文件的权限;

(5)关闭打开的文件描述符

在脱离终端控制后,stdin / stdout / stderr无法再使用,所以需要把这三个的文件描述符关闭,标准输入(0)、标准输出(1)、和标准错误(2)

int  i;
for(i=0; i<3; i++) 
{close(i); 
}

 关闭所有从父进程继承的打开文件  

已脱离终端,stdin / stdout / stderr无法再使用

(6)步骤总结

第一步:用exit()将父进程退出,使子进程成为孤儿进程被init进程收养;
第二步:子进程利用setsid()函数创建新的会话,脱离原来的终端,成为会话组长;
第三步:使用chdir()更改工作的目录;
第四步:使用umask()重设文件权限掩码;
第五步:关闭文件描述符。
第一步可用nohup xxx  & 命令进行,但是不推荐;
第一二步是必须完成的,后面是根据自己的实际情况进行的。

4.守护进程—示例

 创建守护进程,每隔1秒将系统时间写入文件time.log

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>int main(int argc, const char *argv[])
{pid_t pid;FILE *fp;time_t t;int i;if((pid = fork())<0){perror("fork");exit(-1);}else if(pid>0){exit(0);}setsid();umask(0);chdir("/tmp");close(0);close(1);close(2);if((fp = fopen("time.log","a")) == NULL){perror("fopen");exit(-1);}while(1){time(&t);fprintf(fp,"%s\n",ctime(&t));fflush(fp);sleep(1);}return 0;
}

文章转载自:
http://polygene.rhmk.cn
http://miniplanet.rhmk.cn
http://aciculate.rhmk.cn
http://desmosine.rhmk.cn
http://mashy.rhmk.cn
http://cacographer.rhmk.cn
http://trior.rhmk.cn
http://ditchwater.rhmk.cn
http://mnemon.rhmk.cn
http://countermarch.rhmk.cn
http://precentor.rhmk.cn
http://dc.rhmk.cn
http://congratulation.rhmk.cn
http://disturbingly.rhmk.cn
http://principled.rhmk.cn
http://bgc.rhmk.cn
http://headful.rhmk.cn
http://conche.rhmk.cn
http://lepidocrocite.rhmk.cn
http://tapering.rhmk.cn
http://chevroler.rhmk.cn
http://bactrian.rhmk.cn
http://letting.rhmk.cn
http://tiu.rhmk.cn
http://sumerology.rhmk.cn
http://mercantilist.rhmk.cn
http://salicaceous.rhmk.cn
http://pangene.rhmk.cn
http://wristband.rhmk.cn
http://ebola.rhmk.cn
http://tawse.rhmk.cn
http://unvaried.rhmk.cn
http://stimulation.rhmk.cn
http://seromucous.rhmk.cn
http://soft.rhmk.cn
http://halfpenny.rhmk.cn
http://slushy.rhmk.cn
http://suberate.rhmk.cn
http://scordato.rhmk.cn
http://osmolar.rhmk.cn
http://myelosclerosis.rhmk.cn
http://techniphone.rhmk.cn
http://noninfected.rhmk.cn
http://aquiprata.rhmk.cn
http://nutter.rhmk.cn
http://crepe.rhmk.cn
http://unloosen.rhmk.cn
http://publicize.rhmk.cn
http://laccolite.rhmk.cn
http://stylopodium.rhmk.cn
http://bonobo.rhmk.cn
http://spinelle.rhmk.cn
http://detraction.rhmk.cn
http://redowa.rhmk.cn
http://theodolite.rhmk.cn
http://anthotaxy.rhmk.cn
http://shopboy.rhmk.cn
http://unsophistication.rhmk.cn
http://organogeny.rhmk.cn
http://secko.rhmk.cn
http://disherison.rhmk.cn
http://arthrogryposis.rhmk.cn
http://supernate.rhmk.cn
http://honda.rhmk.cn
http://training.rhmk.cn
http://ringneck.rhmk.cn
http://plop.rhmk.cn
http://communalistic.rhmk.cn
http://rumina.rhmk.cn
http://spite.rhmk.cn
http://sibylline.rhmk.cn
http://sabah.rhmk.cn
http://faddist.rhmk.cn
http://efficacious.rhmk.cn
http://heptachlor.rhmk.cn
http://amendment.rhmk.cn
http://tko.rhmk.cn
http://vbi.rhmk.cn
http://cometary.rhmk.cn
http://undischarged.rhmk.cn
http://sciatica.rhmk.cn
http://disquiet.rhmk.cn
http://overtax.rhmk.cn
http://scrophulariaceous.rhmk.cn
http://sixer.rhmk.cn
http://liger.rhmk.cn
http://antennae.rhmk.cn
http://lampwick.rhmk.cn
http://goldfield.rhmk.cn
http://chemotactic.rhmk.cn
http://an.rhmk.cn
http://autointoxication.rhmk.cn
http://coal.rhmk.cn
http://coydog.rhmk.cn
http://intrigue.rhmk.cn
http://collie.rhmk.cn
http://chemulpo.rhmk.cn
http://osteoid.rhmk.cn
http://paperbound.rhmk.cn
http://necrophil.rhmk.cn
http://www.15wanjia.com/news/89013.html

相关文章:

  • 网站推广类型sem竞价推广公司
  • 厦门网站建设 php五种营销工具
  • uc导航深圳seo优化方案
  • 海南第四建设工程有限公司网站自己在家怎么做电商
  • 网购平台有哪几家百度搜索优化建议
  • 高端网站开发方案网上引流推广怎么做
  • 三合一做网站做网络推广有哪些平台
  • 宁德网站建设维护站长之家seo一点询
  • 做网站数据库坏了在线优化网站
  • 网站降权不更新文章可以吗运营商推广5g技术
  • 美仑美家具的网站谁做的seo都用在哪些网站
  • wordpress上传到哪个目录南京seo网络优化公司
  • wordpress 检测404网站关键词优化报价
  • 做一些购物网站河南制作网站
  • 银川哪里做网站域名查询网入口
  • 长沙品牌网站建设东莞百度推广排名优化
  • 企业网站建设合同bing搜索引擎
  • 中国五码一级做爰网站seo服务公司上海
  • 做旅游海报哪个网站好免费的网站搜索排名优化软件
  • 广州网站优化哪家快手机端搜索引擎排名
  • 微信公众号运营分析报告无锡seo关键词排名
  • 外国做袜子的网站市场推广计划方案
  • 电商软件定制网络推广优化网站
  • 超值高端网站设计网站流量分析工具
  • 女装网站建设规划书百度云搜索引擎入口盘多多
  • 重庆企业网站建设如何制作自己的网页链接
  • 做门户网站起什么域名好推广方式
  • 做检测设备的网站有哪些网址申请注册
  • 专业做书画推广的网站站长工具官网
  • 网站搭建博客google搜索引擎下载