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

网站编程入门网络营销专业好就业吗

网站编程入门,网络营销专业好就业吗,北京新增死亡病例详情,烟台怎么做网站进程的回收 1.wait 原型 pid_t wait(int *status); 功能:该函数可以阻塞等待任意子进程退出 并回收该进程的状态。 一般用于父进程回收子进程状态。 参数:status 进程退出时候的状态 如果不关心其退出状态一般用NULL表示 如果要回收进程…
进程的回收
1.wait

原型

pid_t wait(int *status);

功能:该函数可以阻塞等待任意子进程退出
      并回收该进程的状态。
  一般用于父进程回收子进程状态。

参数:status 进程退出时候的状态
  如果不关心其退出状态一般用NULL表示
  如果要回收进程退出状态,则用WEXITSTATUS回收。

返回值:

        成功时,wait返回终止子进程的PID。

        失败时,返回-1,并设置errno来指示错误。

关于子进程状态的一些宏定义:

1.WIFEXITED(status)  是不是正常结束,如果返回非零值,则表示子进程正常结束了它的main函数,或者调用了exit()函数。
2.WEXITSTATUS(status)  为真时,使用这个宏来获取子进程的退出状态码。状态码是由main函数的返回值或者exit()函数的参数决定的。
3.WIFSIGNALED(status) 检查子进程是否是因为接收到信号而终止的。如果返回非零值,则表示子进程是因为信号而终止。    
4.WTERMSIG(status) 为真时,使用这个宏来获取导致子进程终止的信号编号。

5.WIFSTOPPED(status): 检查子进程是否因为接收到SIGSTOPSIGTSTPSIGTTINSIGTTOU信号而停止。如果返回非零值,则表示子进程已经停止。

6.WSTOPSIG(status): 当WIFSTOPPED(status)为真时,使用这个宏来获取导致子进程停止的信号编号。

7.WIFCONTINUED(status): 检查子进程是否已经从停止(stopped)状态继续执行。如果返回非零值,则表示子进程已经继续。

举例:


int a=20;
int main(int argc, const char *argv[])
{pid_t ret =fork();if(ret>0){//printf("father is %d   pid= %d,ppid= %d \n",a,getpid(),getppid());wait(NULL);printf("after wait\n");sleep(5);}else if(0==ret){printf("child = %d pid:%d ppid:%d",a,getpid(),getppid());sleep(3);printf("child terminal\n");exit(1);}else{perror("fork");return 1;}printf("a:%d  pid:%d",a,getpid());return 0;
}

利用宏定义,判断子进程的状态

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int a = 20;
int main(int argc, char *argv[])
{pid_t ret = fork();if(ret>0){//fatherprintf("father is %d   pid %d ,ppid:%d  \n",a,getpid(),getppid());int status;pid_t pid = wait(&status);if(WIFEXITED(status))// 代表子进程正常结束{//正常结束的子进程,才能获得退出值printf("child quit values %d\n",WEXITSTATUS(status));}if(WIFSIGNALED(status))//异常结束{printf("child unnormal signal num %d\n", WTERMSIG(status));}printf("after wait, %d\n",status);}else if(0 == ret){//childprintf("child a is %d pid:%d ppid:%d\n",a,getpid(),getppid());sleep(5);printf("child terminal\n");exit(50);}else {perror("fork error\n");return 1;}printf("a is %d pid:%d\n",a,getpid());return 0;
}
2.waitpid

原型

#include <sys/types.h>
#include <sys/wait.h>pid_t waitpid(pid_t pid, int *status, int options);

参数说明:

  • pid: 子进程的PID。如果设置为 -1,则表示等待任一子进程,这与 wait 函数的行为相同。
  • status: 指向整数的指针,用于接收子进程的状态信息。如果不需要状态信息,可以传递 NULL
  • options: 指定等待行为的选项,常用的选项有:
    • WNOHANG: 如果子进程尚未终止,调用立即返回,而不是挂起等待。
    • 0:  表示回收过程会阻塞等待

返回值:

  • 成功时,返回子进程的PID。
  • 如果子进程尚未终止(使用了 WNOHANG 选项),返回 0。
  • 失败时,返回 -1,并设置 errno 以指示错误

练习:

设计一个多进程程序,用waitpid函数指定回收
其中的某个进程资源并将其状态打印输出。
其他的进程都以非阻塞方式进行资源回收。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{int i = 0 ;pid_t ret[5]={0};printf("father  pid %d ,ppid:%d  \n",getpid(),getppid());for(i = 0 ;i<5;i++){ret[i] = fork();if(ret[i]>0){//father}else if(0 == ret[i]){//childprintf("child  pid:%d ppid:%d\n",getpid(),getppid());sleep(rand()%5);exit(1);}else {perror("fork error\n");return 1;}}int status;while(1){pid_t pid = waitpid(ret[2],&status, WNOHANG);if(ret[2] == pid){if(WIFEXITED(status))// 代表子进程正常结束{//正常结束的子进程,才能获得退出值printf("child quit values %d\n",WEXITSTATUS(status));}if(WIFSIGNALED(status))//异常结束{printf("child unnormal signal num %d\n", WTERMSIG(status));}printf("father recycle success, pid :%d\n",pid);break;}else if(0 == pid){printf("子进程未结束,稍后在试\n");//usleep(1000);sleep(1);}}printf("after wait, %d\n",status);return 0;
}

exec

exec函数族在 C 语言中用于在当前进程的上下文中执行一个新的程序。exec 函数不会创建新的进程,而是替换当前进程的映像为新程序的映像。这意味着进程的PID保持不变,但是执行的程序完全改变。

exec族函数

  1. execl(const char *path, const char *arg0, ...):

            加载并执行由 path 指定的程序,arg0 是传递给新程序的主参数,后面可以跟随其他参数,以 NULL 结尾。
  2. execv(const char *path, char *const argv[]):

              加载并执行由 path 指定的程序,argv 是一个以 NULL 结尾的参数数组。
  3. execle(const char *path, const char *arg0, ..., char *const envp[]):

               与 execl 类似,但允许指定一个新的环境指针数组 envp,替换当前环境。
  4. execve(const char *path, char *const argv[], char *const envp[]):

               加载并执行由 path 指定的程序,argv 是参数数组,envp 是环境变量数组。
  5. execlp(const char *file, const char *arg0, ...):

               与 execl 类似,但在 PATH 环境变量中搜索程序 file
  6. execvp(const char *file, char *const argv[]):

               与 execv 类似,但在 PATH 环境变量中搜索程序 file
  7. execvpe(const char *file, char *const argv[], char *const envp[]):

               与 execve 类似,但在 PATH 环境变量中搜索程序 file,并允许指定新的环境变量数组 envp

举例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{//  firefox www.baidu.com //execl("/usr/bin/firefox","firefox","www.baidu.com",NULL);// env echo $PATH  ls -l --color=auto ll//execlp("ls","ls","-l","--color=auto",NULL);char *const args[]={"ls","-l","--color=auto",NULL};//execv("/bin/ls",args);//vector// pathexecvp(args[0],args);//vector+pathprintf("看见就错了\n");exit(1);return 0;


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{//  firefox www.baidu.com //execl("./aaa","aaa","1","2","3",NULL);// env echo $PATH  ls -l --color=auto ll//execlp("./aaa","aaa","1","2","3",NULL);char *const args[]={"aaa","1","2","3",NULL};//execv("./aaa",args);//vector// pathexecvp("./aaa",args);//vector+patha//如果需要都能调用成功,第一个参数都传 路径+文件名printf("看见就错了\n");exit(1);return 0;
}

http://www.zhongyajixie.com/news/19348.html

相关文章:

  • 宁津网站设计九江seo公司
  • php网站源码大全app开发公司推荐
  • 手机网站制作工具专业营销团队公司
  • 成都 网站 建设如何快速提升网站关键词排名
  • 邢台市网站制作 网站建设google play下载安装
  • 宣传网站怎么做的手机网页制作
  • 网站的设计风格百度怎么推广自己的店铺
  • 深圳网站开发哪家好免费二级域名查询网站
  • 顺德做pc端网站app定制开发
  • 广州南沙网站建设seo排名工具给您好的建议
  • 做推广需要网站吗百合seo培训
  • 微分销系统是什么百度seo哪家公司好
  • 个人备案的网站竞价排名做不了网络营销成功案例ppt
  • 厦门免费做网站自己动手建立个人网站
  • wordpress仿站教程2018做运营的具体做什么
  • 自己做键盘的网站影响关键词优化的因素
  • 电商网站建设目的及网站的优势适合推广的app有哪些
  • wordpress 禁止ip佛山网站优化服务
  • 海南医院网站建设志鸿优化设计
  • 代理网址需要用户名和密码长安seo排名优化培训
  • 新开传奇网站服搜索推广渠道
  • 广告行业网站建设方案外贸平台推广
  • 云南网站开发软件毕节地seo
  • 做网站所需要的代码6如何做好口碑营销
  • 安卓从网站获取视频怎么做短视频拍摄剪辑培训班
  • 建设一个企业网站行业网络营销
  • 重庆 手机网站制作app营销
  • 手机站网站建设广告投放平台有哪些
  • 南京做网站制作公司百度一下你就知道啦
  • 新疆乌鲁木齐专业做网站的公司网页设计与制作考试试题及答案