乐清网站优化wordpress怎么文章共享
web/
2025/10/8 20:11:03/
文章来源:
乐清网站优化,wordpress怎么文章共享,王健林亏60亿做不成一个网站,中文域名转码网站1.替换原理 用fork创建子进程后执行的是和父进程相同的程序#xff08;但有可能执行不同的代码分支#xff09;#xff0c;子进程往往要调用一种exec函数以执行例外一个程序。当进程调用一种exec函数时#xff0c;该进程的用户空间代码和数据完全被新程序替换#xff0c;从…1.替换原理 用fork创建子进程后执行的是和父进程相同的程序但有可能执行不同的代码分支子进程往往要调用一种exec函数以执行例外一个程序。当进程调用一种exec函数时该进程的用户空间代码和数据完全被新程序替换从新程序的启动历程开始执行。调用exec并不创建新进程所以调用exec前后该进程的id并未变化
2.实现一个shell
#includestdio.h
#includesys/wait.h
#includeunistd.h
#includestdlib.h
#includestring.hint main()
{char buf[1024] { 0 };while(1){printf(mysell#);fflush(stdout);size_t s read( 0, buf, sizeof( buf ) );if(s 0){buf[s - 1] \0;printf(%s\n, buf);}char* start buf;char* _argv[32];_argv[0] buf;int i 1;while(*start){if(*start ){*start \0;start ;_argv[i] start;}else{start ;}}_argv[i] NULL;pid_t pid;pid fork();if(pid 0){perror(fork);exit(1);}if(pid 0){execvp(_argv[0], _argv);}else if(pid 0){int st 0;wait(st);}}return 0;
} 3.systempopenfork三个函数的qubie (1)system()函数
#include stdlib.h
int system(const char *command); 1system在执行过程中经理fork - exec - wait 但system在执行过程中会一直等待直到shell命令执行完后才退出即system为串行执行 2system在执行过程中对SIGCHLD、SIGINT、SIGQUIT都做了处理 3SIGCHLD是子进程退出的时候发给父进程的一个信号system()中为什么要屏蔽SIGCHLD信号就是为了system()调用能够及时的退出并且能够正确的获取子进程的退出状态(成功回收子进程)。 2popen函数
#include stdio.h
FILE *popen(const char *command, const char *type); 1popen函数在执行时无须等待shell执行完才退出即popen是并行执行 2popen在执行时对SIGCHLD、SIGINT、SIGQUIT信号不做如何处理 3popen创建的子进程如果不执行pclosepopen创建的子进程就会成为僵尸进程 4popen() 函数用创建管道的方式启动一个 进程, 并调用 shell. 因为管道是被定义成单向的, 所以 type 参数只能定义成只读或者只写, 不能是两者同时, 结果流也相应的是只读或者只写. command 参数是一个字符串指针, 指向的是一个以 null 结束符结尾的字符串, 这个字符串包含一个 shell 命令. 这个命令被送到 /bin/sh 以 -c 参数执行, 即由 shell 来执行. type 参数也是一个指向以 null 结束符结尾的字符串的指针, 这个字符串必须是 ‘r‘ 或者 ‘w’ 来指明是读还是写。 5popen没有屏蔽SIGCHLD主要的原因就是popen是”并行”的。如果我们在调用popen的时候屏蔽了SIGCHLD那么如果在调用popen和pclose之间调用进程又创建了其它的子进程并且调用进程注册了SIGCHLD信号处理句柄来处理子进程的回收工作(waitpid)那么这个回收工作会一直阻塞到pclose调用。这也意味着如果调用进程在pclose之前执行了一个wait()操作的话就可能获取到popen创建的子进程的状态这样在调用pclose的时候就会回收(waitpid)子进程失败返回-1同时设置errno为ECHLD标示pclose无法获取子进程状态。 3fork函数 fork用来创建一个子进程. 1系统让新的进程与旧的进程使用同一个代码段因为它们的程序还是相同的对于数据段和堆栈段系统则复制一份给新的进程这样父进程的所有数据都可以留给子进程 2子进程一旦开始运行虽然它继承了父进程的一切数据但实际上数据却已经分开相互之间不再有影响了也就是说它们之间不再共享任何数据了。而如果两个进程要共享什么数据的话就要使用另一套函数shmgetshmatshmdt等来操作。现在已经是两个进程了对于父进程fork函数返回了子程序的进程号而对于子程序fork函数则返回零这样对于程序只要判断fork函数的返回值就知道自己是处于父进程还是子进程中
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89242.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!