目录
问题
实验示例代码中,调用execl()时,第二个传参为什么会是可执行程序名:
execl("/bin/ls", "ls", "-l", "-color", NULL)
- 猜测原因:可以更好地模拟在shell中执行时的传参,防止传参失效。
- 剖析:
- 我们先来看看 execl() 的定义:
- int execl( path, arg0[,arg1,...argn], NULL);
- char *path, *arg0, *arg1, ..., *argn
- path:(必须)可执行程序的路径(可以是相对路径,也可以是绝对路径)
- arg0, ... argn :(可选)可变参数数量,给这个可执行程序的传参(这些传参是传给可执行程序的main函数)
- NULL:(建议)最后需要一个NULL结尾,表示传参结束。
- 可见,按理从第二个参数开始,都是给可执行程序的传参,因此是不需要第二个参数给一个程序名的。
- 我们可以写一个hello来接收main函数的参数:hello.cpp
#include <iostream>
using namespace std;
int main(int aNum, char** aStr)
{
cout << "hello,coolight" << endl;
cout << "main参数列表:" << endl;
for(int i = 0; i < aNum; ++i)
cout << i + 1 << " : " << aStr[i] << endl;
return 0;
}
- -
- 编译生成 hello
- 然后在实验写的程序中使用execl调用这个 hello :
- execl("./hello", "hello", "-1", "-2", NULL);
- hello程序输出结果:
- 可以看到,第二个参数是程序名(“hello”)确实也是main函数的传参。
- 但是,为什么要这样做呢?
- 如果我们直接在shell运行hello,且不给它传参呢?
- shell执行:$ ./hello
- 运行结果:
- 可见,在shell中,即使只执行hello程序,它本身的文件名也会作为给main函数的第一个传参
- 那现在看来,答案似乎已经在我们面前了:
- 在程序中调用execl()时,第二个参数给了可执行程序名是为了更接近地模拟直接在shell中执行时的传参,防止有些程序会忽略main函数的第一个参数(在shell中运行时是可执行文件名),导致传参可能会失效。
实验具体内容
实验内容
- 用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容
- 利用wait()来控制进程执行顺序
涉及的系统调用
在Linux中fork()是一个非常有用的系统调用,但在Linux中建立进程除了fork()之外,也可用与fork() 配合使用的exec()。
exec()系列
- 系统调用exec( )系列,也可用于新程序的运行。fork( )只是将父进程的用户级上下文拷贝到新进程中,而exec( )系列可以将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更改新进程的用户级上下文。exec( )系列中的系统调用都完成相同的功能,它们把一个新程序装入内存,来改变调用进程的执行代码,从而形成新进程。如果exec( )调用成功,调用进程将被覆盖,然后从新程序的入口开始执行,这样就产生了一个新进程,新进程的进程标识符id 与调用进程相同。
- exec( )没有建立一个与调用进程并发的子进程,而是用新进程取代了原来进程。所以exec( )调用成功后,没有任何数据返回,这与fork( )不同。exec( )系列系统调用在Linux系统库unistd.h中,共有execl、execlp、execle、execv、execvp五个,其基本功能相同,只是以不同的方式来给出参数。
- 一种是直接给出参数的指针,如:
- int execl(path,arg0[,arg1,...argn],0);
- char *path,*arg0,*arg1,...,*argn;
- 另一种是给出指向参数表的指针,如:
- int execv(path,argv);
- char *path,*argv[ ];
exec()和fork()联合使用
- 系统调用exec和fork( )联合使用能为程序开发提供有力支持。用fork( )建立子进程,然后在子进程中使用exec( ),这样就实现了父进程与一个与它完全不同子进程的并发执行。
- 一般,wait、exec联合使用的模型为:
int status;
............
if (fork() == 0)
{
............
execl(...);
............
}
wait(&status);
wait()
- 等待子进程运行结束。如果子进程没有完成,父进程一直等待。wait( )将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait( )前已有子进程暂停或终止,则调用进程做适当处理后便返回。
- 系统调用格式:
- int wait(status)
- int *status;
- 其中,status是用户空间的地址。它的低8位反应子进程状态,为0表示子进程正常结束,非0则表示出现了各种各样的问题;高8位则带回了exit( )的返回值。exit( )返回值由系统给出。
- 核心对wait( )作以下处理:
- (1)首先查找调用进程是否有子进程,若无,则返回出错码;
- (2)若找到一处于“僵死状态”的子进程,则将子进程的执行时间加到父进程的执行时间上,并释放子进程的进程表项;
- (3)若未找到处于“僵死状态”的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。
exit()
- 终止进程的执行。
- 系统调用格式:
- void exit(status)
- int status;
- 其中,status是返回给父进程的一个整数,以备查考。
- 为了及时回收进程所占用的资源并减少父进程的干预,Linux利用exit( )来实现进程的自我终止,通常父进程在创建子进程时,应在进程的末尾安排一条exit( ),使子进程自我终止。exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。
- 如果调用进程在执行exit( )时,其父进程正在等待它的终止,则父进程可立即得到其返回的整数。核心须为exit( )完成以下操作:
- (1)关闭软中断
- (2)回收资源
- (3)写记帐信息
- (4)置进程为“僵死状态”
源代码
- exec_main.cpp
#include <iostream>
#include <unistd.h>
#include "sys/wait.h"
#include "sys/types.h"
using namespace std;
int main()
{
cout << "<< coolgiht" << endl;
int status, renum_fork = fork();
if(renum_fork == -1){
cout << "<< fork error!" << endl;
}else if(renum_fork == 0){ //子进程
execl("./hello", "hello", "-1", "-2", NULL);
cout << "execl error!" << endl;
}else{ //父进程
wait(NULL);
cout << "<< 完成!" << endl;
}
return 0;
}
- hello.cpp
#include <iostream>
using namespace std;
int main(int aNum, char** aStr)
{
cout << "hello,coolight" << endl;
cout << "main参数列表:" << endl;
for(int i = 0; i < aNum; ++i)
cout << i + 1 << " : " << aStr[i] << endl;
return 0;
}
运行结果截图
思考
- 什么是进程同步?wait( )是如何实现进程同步的?
- 一组进程为了协调其推进速度,在某些地方需要相互等待或者唤醒,这种进程间的相互制约就被称作是进程同步。
- 当父进程调用wait()时,会阻塞等待一个子进程结束而发出信号,然后父进程才会继续运行。
ALPHA BITES REVIEWS
MITOLYN REVIW
Kerassentials reviews
Самый популярный букмекер onexbet, ставки с onexbet – это успех|Успешные ставки на спорт с onexbet, ставьте деньги и получайте прибыль|Защитите свои деньги с onexbet, зарабатывайте без стресса|Бонусы и акции от onexbet, не упустите возможность удвоить свой выигрыш|Играйте в казино онлайн на onexbet, наслаждайтесь игрой в любое время суток|Надежный сервис onexbet, получите свои деньги моментально|Легальное онлайн казино onexbet, ваша безопасность – важнее всего|Смотрите спорт в прямом эфире на onexbet, прогнозируйте и побеждайте онлайн|Участвуйте в уникальных акциях onexbet, не упустите шанс стать богаче|Играйте с живыми дилерами на onexbet, ощутите атмосферу настоящего казино|Большой выбор спортивных событий на onexbet, получайте прибыль от своих прогнозов|Делайте выгодные прогнозы и зарабатывайте, получайте прибыль без лишних затрат|Лучшие коэффициенты и выигрыши на onexbet, играйте и побеждайте с onexbet|Решаем любые вопросы и проблемы с onexbet, не оставляйте вопросов без ответа|Легкость использования и простота на onexbet, получайте удовольствие от азарта с onexbet|Увеличьте свои шансы на миллион с onexbet, ставьте и получайте крупные выигрыши|Получайте прибыль от своих прогнозов, не упустите шанс улучшить свою финансовую ситуацию|Персональный коэффициент успеха на onexbet, получайте индивидуальные предложения и бонусы|Ставьте и зарабатывайте вместе с нами, больше денег с onexbet|Профессиональная букмекерская контора onex
onexbet registration onexbet registration .
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали срочный ремонт телефонов honor, можете посмотреть на сайте: ремонт телефонов honor адреса
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов infinix, можете посмотреть на сайте: ремонт телефонов infinix рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Здесь можно домашний сейф купить сейф домашний купить москва
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов honor в москве, можете посмотреть на сайте: ремонт телефонов honor в москве
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов infinix, можете посмотреть на сайте: ремонт телефонов infinix в москве
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Здесь можно сейфы домашние москва сейфы для дома цены в москве
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов honor цены, можете посмотреть на сайте: ремонт телефонов honor рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов infinix адреса, можете посмотреть на сайте: ремонт телефонов infinix рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Здесь можно где купить сейф для дома в москве сейфы домашние москва
Fitspresso reviews
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов meizu в москве, можете посмотреть на сайте: ремонт телефонов meizu в москве
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов meizu рядом, можете посмотреть на сайте: ремонт телефонов meizu рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Получайте больше прибыли на onexbet, не отрываясь от компьютера.
onexbet – ваш ключ к финансовой независимости, всегда и везде.
Ставки на спорт с onexbet, самые выгодные коэффициенты.
Попробуйте свою удачу вместе с onexbet, и ваша жизнь никогда не будет прежней.
onexbet – доверие и надежность, неизменно остаются важнейшими.
Хотите ли вы заработать крупные суммы? Вам нужен onexbet, – самый удачный выбор для вас.
onexbet – ваш надежный союзник в мире игры, на который всегда можно положиться.
Играя на onexbet, вы становитесь ближе к своей мечте, используйте onexbet для достижения ваших целей.
onexbet – это не просто игра, это образ жизни, которая помогает вам выразить себя.
Готовы к большим деньгам и успеху? Попробуйте onexbet, и вы поймете, что все возможно.
onexbet – это не просто компания, это ваш путь к финансовой независимости, о котором мечтали.
Ставки на onexbet – это легко и увлекательно, но при этом ценит комфорт и безопасность.
Доступ к самым популярным играм и событиям на onexbet, все это доступно для вас.
Хотите выигрывать больше? Присоединяйтесь к onexbet, и вы обязательно останетесь довольны.
AbbieHouck6 https://arxbetdsrdg.com/user/abbiehouck6/ .
Здесь можно сейфы для дома цена купить сейфы для дома
Выигрывайте больше на onexbet, не выходя из дома.
onexbet – ваш ключ к финансовой независимости, всегда и везде.
Спортивные ставки на onexbet, самые выгодные коэффициенты.
Ощутите азарт игры с onexbet, и вы обязательно останетесь довольны.
onexbet – качество и профессионализм, всегда гарантированы.
Мечтаете о финансовом благополучии? Вам нужен onexbet, – надежный партнер на пути к успеху.
onexbet – ваш лучший друг и помощник в мире ставок, который всегда поддерживает ваши желания и цели.
Играя на onexbet, вы становитесь ближе к своей мечте, добивайтесь успеха вместе с onexbet.
onexbet – это не просто азарт, это философия, которая помогает вам выразить себя.
Хотите изменить свою жизнь к лучшему? Начните с onexbet, и вы поймете, что удача всегда на вашей стороне.
onexbet – это не просто компания, это ваш путь к финансовой независимости, который вы искали.
onexbet – это идеальное место для тех, кто ищет азарт и адреналин, но при этом ценит профессионализм и конфиденциальность.
Доступ к самым популярным играм и событиям на onexbet, все это гарантировано для вас.
Желаете больше азарта и адреналина? Попробуйте onexbet, и ваша жизнь никогда не будет прежней.
one x bet com one x bet com .
Здесь можно купить сейф для дома сейф купить для дома магазин
Зарабатывайте больше денег на onexbet, не выходя из дома.
onexbet – ваш ключ к финансовой независимости, даже в отпуске.
Спортивные ставки на onexbet, оптимальные шансы на победу.
Ощутите азарт игры с onexbet, и ваша жизнь никогда не будет прежней.
onexbet – безопасность и конфиденциальность, для вас всегда в приоритете.
Мечтаете о финансовом благополучии? Вам нужен onexbet, – самый удачный выбор для вас.
onexbet – ваш надежный союзник в мире игры, который всегда придет на помощь.
Играя на onexbet, вы становитесь ближе к своей мечте, добивайтесь успеха вместе с onexbet.
onexbet – это не просто игра, это образ жизни, которая помогает вам обогатиться.
Хотите изменить свою жизнь к лучшему? Начните с onexbet, и вы поймете, что удача всегда на вашей стороне.
onexbet – это не просто компания, это ваш путь к финансовой независимости, о котором мечтали.
onexbet – это идеальное место для тех, кто ищет азарт и адреналин, но при этом ценит качество и надежность.
Лучшие коэффициенты и выигрыши на onexbet, все это гарантировано для вас.
Хотите выигрывать больше? Присоединяйтесь к onexbet, и вы обязательно останетесь довольны.
MillaPoate517 https://arxbetdsrdg.com/user/millapoate517/ .
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов meizu сервис, можете посмотреть на сайте: срочный ремонт телефонов meizu
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов poco сервис, можете посмотреть на сайте: ремонт телефонов poco
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
MITOLY REVIEWS
Здесь можно купить домашний сейф где можно купить сейф для дома
Mitolyn
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов samsung сервис, можете посмотреть на сайте: срочный ремонт телефонов samsung
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов nothing сервис, можете посмотреть на сайте: срочный ремонт телефонов nothing
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов samsung, можете посмотреть на сайте: ремонт телефонов samsung рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов nothing рядом, можете посмотреть на сайте: ремонт телефонов nothing в москве
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Здесь можно ящик для оружия купитьшкаф для ружья
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов nothing, можете посмотреть на сайте: ремонт телефонов nothing
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов nothing, можете посмотреть на сайте: ремонт телефонов nothing рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов samsung в москве, можете посмотреть на сайте: ремонт телефонов samsung рядом
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Здесь можно магазин сейфы для оружияоружейный ящик купить
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
LIPOZEM REVIEW
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Can I simply say what a comfort to uncover someone that genuinely understands what they’re discussing on the internet. You actually realize how to bring a problem to light and make it important. More and more people really need to read this and understand this side of the story. I was surprised that you aren’t more popular given that you surely possess the gift.
Introducing to you the most prestigious online entertainment address today. Visit now to experience now!
Tremendous issues here. I am very satisfied to look your post.
Thanks a lot and I am having a look ahead to touch you.
Will you please drop me a mail?
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов sony адреса, можете посмотреть на сайте: ремонт телефонов sony
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Предлагаем услуги профессиональных инженеров офицальной мастерской.
Еслли вы искали ремонт телефонов realme адреса, можете посмотреть на сайте: срочный ремонт телефонов realme
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!