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

上海集团网站制作各大网站黑白几天

上海集团网站制作,各大网站黑白几天,app开发网站建设培训班,网站域名和网站网址Linux上创建一个新的进程可以使用fork函数&#xff0c;这个函数执行的效果是复制当前进程创建一个新的进程&#xff0c;这个进程执行的代码与父进程相同。通过fork返回的pid我们可以在fork后的代码中区分父进程和子进程需要执行的逻辑。示例代码如下&#xff1a; #include <…

Linux上创建一个新的进程可以使用fork函数,这个函数执行的效果是复制当前进程创建一个新的进程,这个进程执行的代码与父进程相同。通过fork返回的pid我们可以在fork后的代码中区分父进程和子进程需要执行的逻辑。示例代码如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int main() {pid_t pid = fork();if (pid < 0) {fprintf(stderr, "Fork failed");return 1;} else if (pid == 0) {// 子进程代码printf("Child process (PID: %d)\n", getpid());} else {// 父进程代码printf("Parent process (PID: %d), Child PID: %d\n", getpid(), pid);}return 0;
}

而在window上,使用CreateProcess接口可以直接指定一个可执行程序路径创建新的进程,新进程的执行代码不在父进程中。

#include <windows.h>
#include <stdio.h>
#include <tchar.h>void _tmain( int argc, TCHAR *argv[] )
{STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory( &si, sizeof(si) );si.cb = sizeof(si);ZeroMemory( &pi, sizeof(pi) );if( argc != 2 ){printf("Usage: %s [cmdline]\n", argv[0]);return;}// Start the child process. if( !CreateProcess( NULL,   // No module name (use command line)argv[1],        // Command line 这里指定程序路径NULL,           // Process handle not inheritableNULL,           // Thread handle not inheritableFALSE,          // Set handle inheritance to FALSE0,              // No creation flagsNULL,           // Use parent's environment blockNULL,           // Use parent's starting directory &si,            // Pointer to STARTUPINFO structure&pi )           // Pointer to PROCESS_INFORMATION structure) {printf( "CreateProcess failed (%d).\n", GetLastError() );return;}// Wait until child process exits.WaitForSingleObject( pi.hProcess, INFINITE );// Close process and thread handles. CloseHandle( pi.hProcess );CloseHandle( pi.hThread );
}

可以看到两者的不同之处:fork复制当前进程开启新进程,执行的代码都在父进程中,createProcess指定可执行程序从而开启新进程,执行代码的代码在指定的可执行程序中。那么在linux上如何实现类似createProcess的效果呢,一种是fork+exec:

pid_t parent = getpid();
pid_t pid = fork();if (pid == -1)
{// error, failed to fork()
} 
else if (pid > 0)
{int status;waitpid(pid, &status, 0);
}
else 
{// we are the childexecve(...);_exit(EXIT_FAILURE);   // exec never returns
}

exec函数族会替换当前的进程映像(process image),我的理解是相当于子进程变成了exec指定的新的可执行程序在执行。还可以使用posix_spawn函数,用法类似windows的createProcess:

pid_t pid;char *argv[] = {"ls", (char *) 0};int status;puts("Testing posix_spawn");fflush(NULL);status = posix_spawn(&pid, "/bin/ls", NULL, NULL, argv, environ);if (status == 0) {printf("Child id: %i\n", pid);fflush(NULL);if (waitpid(pid, &status, 0) != -1) {printf("Child exited with status %i\n", status);} else {perror("waitpid");}} else {printf("posix_spawn: %s\n", strerror(status));}

Linux设计上将“创建一个新进程”和“加载新的可执行程序到新的进程”两个步骤分离了,而windows的CreateProcess则是把两个步骤合并了。

  1. https://learn.microsoft.com/en-us/windows/win32/procthread/creating-processes
  2. https://stackoverflow.com/questions/5883462/linux-createprocess
  3. https://superuser.com/questions/1737519/why-a-fork-is-often-followed-by-an-exec
http://www.dtcms.com/a/522486.html

相关文章:

  • 宣讲家网站 家风建设wordpress链接title属性
  • 网站建设品牌营销青岛网站建设谁家好一些
  • 汽车设计网站网站备案单位查询系统
  • 齐齐哈尔市建设网站腾讯云可视化wordpress
  • 做网站多久才会有收益Html5移动网站
  • 比较好看的网站seo搜索引擎优化排名
  • 郑州建设网站报价中铁建设集团门户网登录网站
  • 化妆品网站建设版块铭讯网站建设
  • 土特产网站建设事业计划书成都建网站多少钱
  • 增城哪家网站建设好微信网站建设价格
  • 湖南省建设厅官网网站写作平台
  • ps怎么做网站导航怎么做视频直播网站
  • 如何设计网站后台广州网络推广外包
  • 微信企业号可以做微网站吗做电影网站什么后果
  • 百度站长工具怎么推广网站长春市宽城区建设局网站
  • 如何实现网站开发手机验证码创业做网站 优帮云
  • 元谋县住房和城乡建设局网站wordpress 插件 前端
  • 一般建设企业网站的费用免费推广的平台
  • 深圳网站建设公司模板如何做视频会员网站
  • 3d云打印网站开发网站建设教程书籍
  • 做网站的每天打电话咋办营销策划公司是干嘛的
  • 惊艳的网站有哪些网站做的比较好的
  • 海口网站制作方案搜索引擎推广seo
  • 律师的网站模板如何做多语言网站
  • 奉节集团网站建设ip138查询网站网址域名ip
  • 网站制作的大公司室内设计自学教程
  • 长沙网站推广工具上市公司做网站有什么用
  • 企业微网站哪个版本好建设银行辽宁分行报名网站
  • 微信小程序怎么注销账号seo培训费用
  • 网站服务是什么建行网站用户名