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

gta5购买房产网站正在建设洛可可创新设计集团

gta5购买房产网站正在建设,洛可可创新设计集团,百度推广效果,淄博seo网络公司我在A程序中占用了/dev/video0这个独占模式的设备文件#xff0c;在A中用system函数启用了B程序#xff0c;B程序的代码中并不包含对/dev/video0的访问#xff0c;但是我发现B程序也占用了/dev/video0#xff0c;并且我在A程序中关闭了/dev/video0后#xff0c;A程序不再占…我在A程序中占用了/dev/video0这个独占模式的设备文件在A中用system函数启用了B程序B程序的代码中并不包含对/dev/video0的访问但是我发现B程序也占用了/dev/video0并且我在A程序中关闭了/dev/video0后A程序不再占用/dev/video0但是发现B程序依然占用着/dev/video0这是为什么呢 当你在A程序中打开/dev/video0并启动B程序时B程序继承了A程序打开的所有文件描述符包括/dev/video0的文件描述符。这就导致了B程序也可以访问/dev/video0即使B程序的代码中并不包含对/dev/video0的访问。 当A程序关闭/dev/video0时只是让A程序不再使用该设备但是并没有真正地释放该设备的控制权因为B程序依然在使用它。因此当你尝试再次打开/dev/video0时你会得到“设备忙”的错误提示因为此时该设备已经被B程序占用而不是被A程序占用。要想让B程序释放/dev/video0你需要杀死B程序或让B程序自行关闭/dev/video0。 我的目的是在A中启用B程序并且在A中可以杀死B并且B不占用/dev/video0那么有什么办法呢 您可以考虑在A程序中使用fork()函数创建一个子进程然后在子进程中调用B程序。这样子进程和B程序之间是独立的进程不会共享A程序的资源包括/dev/video0。同时由于子进程和A程序是不同的进程所以A程序可以通过杀死子进程的方式来结束B程序的执行。 示例代码如下 #include iostream #include unistd.h #include sys/types.h #include sys/wait.husing namespace std;int main() {pid_t pid fork();if (pid -1) {// fork() failedcerr Failed to fork() endl;return 1;} else if (pid 0) {// child processexecl(/path/to/B, B, NULL);cerr Failed to execute B endl;return 1;} else {// parent process// wait for child process to terminateint status;waitpid(pid, status, 0);if (WIFEXITED(status)) {cout Child process exited with status WEXITSTATUS(status) endl;}}return 0; }在子进程中使用execl()函数调用B程序。注意execl()函数的第一个参数是B程序的路径第二个参数是B程序的名称第三个参数是一个空指针。execl()函数调用成功后子进程会替换成B程序的进程而且B程序与A程序是独立的进程不会共享任何资源。 在父进程中使用waitpid()函数等待子进程结束并获取子进程的退出状态。如果子进程正常结束可以通过WEXITSTATUS()宏获取子进程的退出码。 另外如果您需要在A程序中占用/dev/video0这个设备文件建议您在打开和关闭设备文件时加上文件锁避免其他进程对设备文件的非法访问。 execl()系列函数来实现相同的目的。execl()系列函数会用指定的可执行程序替换当前进程所以它不会创建新的进程也不会复制原来进程的文件描述符表。 execl()函数会用指定的可执行程序来替换当前进程如果替换成功那么之后的代码将会在新的程序中执行如果替换失败则execl()函数会直接返回并且不会继续执行后面的代码。 在调用execl()函数时当前进程的代码段、数据段等内存区域会被指定的可执行程序替换即当前进程会被新的程序所取代新程序从main()函数开始执行原先的程序和它所占用的内存空间都会被释放掉也就是说调用execl()函数后当前进程的程序完全变成了新程序。这种方式常常用于实现进程的程序替换比如常用的Unix命令行工具如ls、grep、ps等等这些工具其实都是通过execl()等函数实现的。 不是同一个进程id号。使用fork()创建新进程后新进程会复制父进程的地址空间、文件描述符表等资源但是会拥有一个新的进程id号。然后在新进程中使用execl()函数执行B程序时新进程的地址空间、文件描述符表等都会被替换为B程序的内容但是进程id号不会改变。所以A程序和B程序是通过两个不同的进程id号来运行的。 使用 vfork() 函数创建新进程时新进程会共享父进程的地址空间和部分资源包括文件描述符、共享内存和信号处理函数等。但是由于 vfork() 函数不会像 fork() 函数一样完全复制父进程的地址空间所以需要特别注意以下几点 新进程和原来的父进程有不同的进程ID。在 vfork() 函数创建的新进程中子进程的进程ID会被设置为0。一旦子进程开始执行它会通过调用 exec() 函数来加载新的程序代码并替换自己的地址空间此时子进程的进程ID将会改变。 父进程和子进程共享地址空间。由于新进程和原来的父进程共享同一地址空间因此它们可以直接访问相同的变量和函数。这也意味着如果子进程修改了某个变量的值父进程中对应的变量值也会发生改变。 子进程会阻塞父进程。在 vfork() 函数创建新进程时父进程会被阻塞直到子进程执行完毕或者调用 exec() 函数为止。因此在使用 vfork() 函数时需要确保子进程能够尽快执行完毕否则可能会导致父进程长时间被阻塞。 综上所述虽然新进程和原来的父进程共享部分资源和文件描述符但是它们的进程ID是不同的同时也需要注意避免在子进程中修改父进程的数据以及确保子进程能够尽快执行完毕以避免对父进程的阻塞。
http://www.hkea.cn/news/14394717/

相关文章:

  • 原有网站已备案 怎么做接入哪个网站可以做自由行地图
  • 广州营销型网站建设怎么建一个视频网站做推广
  • 那里做网站比较好建设部网站统计
  • 营销型网站制作企业百度推广的效果
  • 网站建设流程效果旧金山互联网公司排名
  • 苏小小移动网站网站搭建免费软件
  • 腾讯云网站建设教学视频教程网络平台推广广告费用
  • wordpress 建站泰州企业网站模板建站
  • 网站开发术语wordpress建设QQ登录
  • 公众号开发网站用html5的视频网站
  • 做网站外快设计网站一条龙
  • 东营网站开发招聘抖音seo优化软件
  • 动态图表网站物流网个人网站建设
  • 做做网站2023下载优秀定制网站建设方案
  • 邯郸企业网站制作建设网站建设工作室是干嘛的
  • 研究生网站 建设 需求wordpress 替换 谷歌
  • 做网站需要什么服务器配置wordpress 修改登录地址
  • 网站开发学费企业如何网站建设
  • 南县网站定制网页开发工具怎么打开
  • 微信建网站服务新网官方网站登陆
  • 网站服务器信息查询凡科企业邮箱
  • 网站支付怎么做微信推广营销
  • 旅游网站后台模板下载重庆新闻频道回放观看
  • 淘宝客需要自己做网站吗网上开店网站
  • 下载网站软件免费安装html企业网站系统
  • 婚礼网站建设徐州铜山区建设局网站
  • 中国最好的编程学校灰色词seo排名
  • php做网站用html做吗百科创建
  • 网站建设的风格室内设计师一个月多少钱
  • 网站前瞻性 新流量机会内容建设分析wordpress伪静态规则iis