目录
问题
按ctrl c给父进程传信号后,父进程会发送信号给子进程,为什么子进程没有反应?
而只有修改父进程给子进程发送的信号为SIGINT时才会有反应?
- 原因:由于在shell中运行了父进程,父进程又创建了两个子进程,此时两个子进程和父进程是同一个进程组的,当我们在shell中按ctrl c时,会给前台进程组(即父进程和两个子进程)发送了SIGINT信号,此时父进程有对应SIGINT信号的自定义操作,但子进程并没有,因此子进程此时会执行这个信号默认的操作:结束进程。所以说,在我们按下ctrl c时,子进程已经结束了,此时父进程在给子进程发信号,但子进程已经死了,所以发的信号自然就没用了。
- 如果修改父进程给子进程发送的信号为SIGINT,就可以了吗?
- 还是不太正确的
- 因为在实验中,子进程收到信号后执行操作后就会结束进程。当我们按下ctrl c时,就已经发送了SIGINT信号给了子进程,子进程虽然此时会执行我们的自定义操作,输出信息,但之后就结束进程了。然后父进程才发信号过来给子进程,但子进程此时也是已经死了,所以父进程的信号依然是不起效果的。
- 解决办法:
- 可以让子进程忽略 ctrl c 即 SIGINT 信号,父进程依旧发送16 / 17信号
- 在子进程中加一句 signal(SIGINT ,1); //忽略SIGINT信号
- 可以另起一个会话窗口,先($ ps -a )找到父进程的pid,一般父进程是同名的三个进程中pid最小的那个,然后($ kill -2 父进程pid)来单独给父进程发送SIGINT信号,这样就避免了一开始按 ctrl c 时子进程跟着父进程接收了SININT信号的问题。
- 可以让子进程忽略 ctrl c 即 SIGINT 信号,父进程依旧发送16 / 17信号
实验具体内容
实验内容
- 编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
- Child process1 is killed by parent!
- Child process2 is killed by parent!
- 父进程等待两个子进程终止后,输出如下的信息后终止:
- Parent process is killed!
- 分析利用软中断通信实现进程同步的机理
概念
信号的基本概念
- 每个信号都对应一个正整数常量(称为signal number,即信号编号。定义在系统头文件<signal.h>中),代表同一用户的诸进程之间传送事先约定的信息的类型,用于通知某进程发生了某异常事件。每个进程在运行时,都要通过信号机制来检查是否有信号到达。若有,便中断正在执行的程序,转向与该信号相对应的处理程序,以完成对该事件的处理;处理结束后再返回到原来的断点继续执行。实质上,信号机制是对中断机制的一种模拟,故在早期的Linux版本中又把它称为软中断。
- 信号与中断的相似点:
- (1)采用了相同的异步通信方式;
- (2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;
- (3)都在处理完毕后返回到原来的断点;
- (4)对信号或中断都可进行屏蔽。
- 信号与中断的区别:
- (1)中断有优先级,而信号没有优先级,所有的信号都是平等的;
- (2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;
- (3)中断响应是及时的,而信号响应通常都有较大的时间延迟。
- 信号机制具有以下三方面的功能:
- (1)发送信号。发送信号的程序用系统调用kill( )实现;
- (2)预置对信号的处理方式。接收信号的程序用signal( )来实现对处理方式的预置;
- (3)收受信号的进程按事先的规定完成对相应事件的处理。
信号的发送
- 信号的发送,是指由发送进程把信号送到指定进程的信号域的某一位上。如果目标进程正在一个可被中断的优先级上睡眠,核心便将它唤醒,发送进程就此结束。一个进程可能在其信号域中有多个位被置位,代表有多种类型的信号到达,但对于一类信号,进程却只能记住其中的某一个。
- 进程用kill( )向一个进程或一组进程发送一个信号。
对信号的处理
- 当一个进程要进入或退出一个低优先级睡眠状态时,或一个进程即将从核心态返回用户态时,核心都要检查该进程是否已收到软中断。当进程处于核心态时,即使收到软中断也不予理睬;只有当它返回到用户态后,才处理软中断信号。对软中断信号的处理分三种情况进行:
- (1)如果进程收到的软中断是一个已决定要忽略的信号(function=1),进程不做任何处理便立即返回;
- (2)进程收到软中断后便退出(function=0);
- (3)执行用户设置的软中断处理程序。
涉及函数
kill( )
- 系统调用格式
- int kill(pid,sig)
- 参数定义
- int pid,sig;
- 其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号
- (1)pid>0时,核心将信号发送给进程pid
- (2)pid=0时,核心将信号发送给与发送进程同组的所有进程
- (3)pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程
signal( )
- 预置对信号的处理方式,允许调用进程控制软中断信号。
- 系统调用格式
- signal(sig,function)
- 头文件为
- #include <signal.h>
- 参数定义
- signal(sig,function)
- int sig;
- void (*func) ( )
- 其中sig用于指定信号的类型,sig为0则表示没有收到任何信号,余者如下表:
值 | 名 字 | 说 明 |
01 | SIGHUP | 挂起(hangup) |
02 | SIGINT | 中断,当用户从键盘按^c键或^break键时 |
03 | SIGQUIT | 退出,当用户从键盘按quit键时 |
04 | SIGILL | 非法指令 |
05 | SIGTRAP | 跟踪陷阱(trace trap),启动进程,跟踪代码的执行 |
06 | SIGIOT | IOT指令 |
07 | SIGEMT | EMT指令 |
08 | SIGFPE | 浮点运算溢出 |
09 | SIGKILL | 杀死、终止进程 |
10 | SIGBUS | 总线错误 |
11 | SIGSEGV | 段违例(segmentation violation),进程试图去访问其虚地址空间以外的位置 |
12 | SIGSYS | 系统调用中参数错,如系统调用号非法 |
13 | SIGPIPE | 向某个非读管道中写入数据 |
14 | SIGALRM | 闹钟。当某进程希望在某时间后接收信号时发此信号 |
15 | SIGTERM | 软件终止(software termination) |
16 | SIGUSR1 | 用户自定义信号1 |
17 | SIGUSR2 | 用户自定义信号2 |
18 | SIGCLD | 某个子进程死 |
19 | SIGPWR | 电源故障 |
- function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。
- function 的解释如下:
- (1)function=1时,进程对sig类信号不予理睬,亦即屏蔽了该类信号;
- (2)function=0时,缺省值,进程在收到sig信号后应终止自己;
- (3)function为非0,非1类整数时,function的值即作为信号处理程序的指针。
源代码
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <iostream>
#include <sys/wait.h>
#include <sys/types.h>
using namespace std;
/*记录子进程pid,
* whois:
* 0:父进程
* 1:子进程1
* 2:子进程2*/
int pid1 = 0, pid2 = 0, whois = 0;
/*信号*/
#define COOLSIG SIGINT
/*响应信号*/
void do_exit(int)
{
switch (whois)
{
case 0:
{
kill(pid1, COOLSIG);
kill(pid2, COOLSIG);
cout << "<< wait1: " << wait(0) << endl;
cout << "<< wait2: " << wait(0) << endl;
cout << "<< 父进程退出" << endl;
}break;
case 1:;
case 2:
{
cout << "<< 子进程" << whois << "结束!" << endl;
}break;
}
exit(0);
}
int main()
{
cout << "<< COOLSIG = " << COOLSIG << endl;
pid1 = fork();
if (pid1 == -1){
cout << "<< fork error" << endl;
}
else if (pid1 == 0)
{
whois = 1; //子进程1
signal(COOLSIG, do_exit);
}
else
{
cout << "pid1 = " << pid1 << endl;
pid2 = fork(); //父进程
if (pid2 == -1)
{
cout << "<< fork error" << endl;
}
else if (pid2 == 0)
{
whois = 2; //子进程2
signal(COOLSIG,do_exit);
}
else
{
cout << "pid2 = " << pid2 << endl;
whois = 0; //父进程
signal(SIGINT, do_exit);
cout << "<< 父进程等待 ctrl + C ..." << endl;
}
}
while (1)
usleep(100);
cout << "<< 退出了,whois = " << whois << endl;
return 0;
}
运行结果截图
思考
- 本程序的预期结果为显示:
- Child process1 is killed by parent!
- Child process2 is killed by parent!
- Parent process is killed!
- 预期的结果可以正确显示吗?如果不可以,程序该如何修改才能得到正确结果?
- 不能,解决办法如下几种:
- 可以把给子进程发送和接收的信号改为 SIGINT(此办法可以使输出正常,但父进程的发给子进程的信号并没有用到)
- 可以让子进程忽略 ctrl c 即 SIGINT 信号,父进程依旧发送16 / 17信号
- 在子进程中加一句 signal(SIGINT ,1);
- 可以另起一个会话窗口,先($ ps -a )找到父进程的pid,然后使用命令($ kill -2 父进程pid)来单独给父进程发送SIGINT信号,这样就避免了一开始按 ctrl c 时子进程跟着父进程接收了SININT信号的问题。
- 该程序段前面部分用了两个wait(0),它们起什么作用?
- 一个wait(0)只会让父进程等待一个子进程结束,而本实验中有2个子进程,使用两个wait(0)可以让父进程等待两个子进程全都结束后才输出并结束。
Здравствуйте!
Купить документ ВУЗа
edpillsfinder.com/
Здравствуйте!
Заказать документ ВУЗа
gostcatalog.ru/index.php?p=1402763814
Привет,друзья!
Заказать диплом университета .
telegra.ph/kupit-diplom-ehkonomista-v-moskve-08-13
ремонт телевизоров с выездом
Можно ли купить аттестат о среднем образовании? Основные рекомендации
Как получить диплом о среднем образовании в Москве и других городах
Привет, друзья!
Купить диплом о высшем образовании
купить диплом в ялте
Можно ли быстро купить диплом старого образца и в чем подвох?
Сколько стоит диплом высшего и среднего образования и как его получить?
Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт бытовой техники
Здравствуйте!
Купить диплом о высшем образовании.
telegra.ph/kupit-diplom-tehnikuma-spb-08-13
Добрыйдень!
Купить диплом о высшем образовании.
telegra.ph/kupit-diplom-v-kurgane-08-13-7
Букмекер Мелбет неслучайно пользуется популярностью среди игроков. Если вы желаете делать ставки на UFC, воспользуйтесь сайтом оператора Мелбет. Здесь предложена одна из лучших росписей в режиме Live и в линии. Обширная вариативность ставок – на исход, продолжительность состязания и формы досрочных побед, а также сравнительно высокие коэффициенты сделают вашу игру наиболее насыщенной. Для поддержания интересов клиентов, букмекер Мелбет предлагает разнообразные бонусные программы, которые дают определенные привилегии игрокам. Они могут выражаться в фрибетах, бонусах к депозиту или в виде кэшбэка. Чтобы открыть доступ ко всем бонусам от букмекера, используйте мелбет промокод при регистрации. Бонусы, которые предлагает букмекер действующим клиентам, можно использовать на ставках по любым спортивным направлениям. Если вы интересуетесь смешанными единоборствами, на сайте Мелбет можно найти порядка сотни предложений по заключению пари на актуальные матчи. Выбор ставок доступен как в линии, так и в Live-разделе. Чтобы воспользоваться бонусами от букмекера и перейти к заключению пари на спорт, необходимо создать личную учетную запись на сайте. Рассказываем, как это сделать.
Как не попасть впросак при покупке диплома колледжа или ПТУ в России
оптимизация сайта недорого продвижение сайтов
мастер по телевизорам
ПромоКод Букмекерской Конторы Melbet 2024 При Регистрации – это код для новых пользователей, так как он дает денежные призы на первый депозит новым игрокам. промокод Melbet при регистрации – это отличный способ сделать игру максимально захватывающей и прибыльной. Букмекер регулярно запускает выгодные бонусные программы и акции, которые помогают беттерам наслаждаться игровым процессом и иметь особые привилегии. Сегодня доступно несколько типов промокодов на игру в Мелбет. Они различаются условиями получения и принципом действия. Melbet промокод при регистрации, увеличивающий сумму первого взноса. С его помощью можно получить дополнительные 130% на игровой баланс для заключения пари.
Сколько стоит получить диплом высшего и среднего образования легально?
Семейные расстановки – Hellinger. https://rasstanovkiural.ru
Быстрая схема покупки диплома старого образца: что важно знать?
https://1win.directory/# 1win зеркало
Здравствуйте!
Приобрести документ о получении высшего образования
google.com.eg/url?q=aurus-diploms.com
Здравствуйте!
Мы предлагаем дипломы любой профессии по доступным тарифам.
mypenza.ru/forum/index.php?showtopic=61980
Можно ли купить аттестат о среднем образовании? Основные рекомендации
vibration analysis
The Importance of Oscillation Control Tools in Machinery
In industrial settings, equipment and rotating equipment serve as the backbone of manufacturing. However, one of the most common challenges which can impede the operation as well as lifetime is vibration. Vibrations might lead to a series of complications, including reduced exactness along with performance to greater wear and tear, ultimately causing high-cost downtime and fixes. This is when vibration management equipment is necessary.
Why Vibration Control is Necessary
Vibration inside equipment can bring about numerous harmful effects:
Minimized Functional Performance: Excessive oscillation may bring about misalignment as well as distortion, lowering the productivity in such devices. Such can lead to delayed output times and elevated power consumption.
Heightened Erosion: Constant vibration accelerates the damage in equipment components, bringing about more regular maintenance and a chance of unexpected unexpected issues. Such a scenario doesn’t merely heightens operational costs and decreases the durability of the devices.
Safety Risks: Excessive resonance may bring substantial safety concerns for both the equipment and the equipment along with the operators. In, serious conditions, such vibrations may bring about disastrous equipment breakdown, jeopardizing operators as well as leading to widespread destruction to the environment.
Precision and Manufacturing Quality Challenges: In businesses which rely on exact measurements, for example industrial sectors as well as aviation, vibrations could result in flaws in the manufacturing process, producing defects and more waste.
Reasonably Priced Approaches for Oscillation Control
Investing in vibration control tools is not just a necessity and also a smart decision for any company that uses mechanical systems. We offer cutting-edge vibration management systems work to intended to reduce oscillation from various mechanical systems or rotating machinery, guaranteeing uninterrupted as well as productive processes.
What sets our tools apart is its reasonable pricing. We understand the importance of affordability in today’s competitive market, which is why we provide high-quality vibration regulation systems at costs that are affordable.
Through selecting our equipment, you are not just securing your equipment along with boosting its efficiency but also putting investment towards the sustained performance of your operations.
Final Thoughts
Oscillation control is a vital factor in preserving the efficiency, protection, as well as longevity of your industrial equipment. With our economical vibration management tools, you can ensure your production operate seamlessly, your products remain top-tier, along with your workers stay safe. Don’t let resonance affect your machinery—invest in the proper tools today.
1xbet официальный сайт мобильная версия: 1xbet официальный сайт – 1xbet официальный сайт
Диплом техникума купить официально с упрощенным обучением в Москве
Привет!
Приобрести диплом ВУЗа
купить диплом мастера маникюра и педикюра
http://pin-up.diy/# пин ап казино
1win зеркало: 1win вход – 1win вход
http://pin-up.diy/# пин ап вход
Профессиональный сервисный центр по ремонту Apple iPhone в Москве.
Мы предлагаем: качественный ремонт айфонов в москве
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
автоматические карнизы автоматические карнизы .
Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт бытовой техники в новосибирске
Профессиональный сервисный центр по ремонту Apple iPhone в Москве.
Мы предлагаем: ремонт iphone на дому в москве
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
Стоимость дипломов высшего и среднего образования и процесс их получения
acertdglobalplatform.mn.co/posts/65294335
http://1win.directory/# 1win вход
Добрыйдень!
Заказать диплом ВУЗа .
telegra.ph/diplom-buhgaltera-kupit-08-13-4
1win: 1вин официальный сайт – 1win
Если вы искали где отремонтировать сломаную технику, обратите внимание – ремонт бытовой техники