改进目标:标准的Windows窗口程序
定义:管道是进程间的一种通信机制,一个进程(A)可以通过管道把数据传输到另外一个进程(B)。前者(A)向管道输入数据,后者(B)从管道读取数据
双向通信必须建立2个管道
要支持程序见双向通信,父进程(A)必须创建2个管道
父进程(即算命大师改进版程序)创建2个管道
CreatePipe(&hPipe_1_ReadHandle, &hPipe1_WriteHandle, &sa, 0);
CreatePipe(&hPipe_2_ReadHandle, &hPipe2_WriteHandle, &sa, 0);
父进程创建子进程(算命大师的原始版程序),隐藏它并输入/输出重定向到管道
StartInfo.wShowWindow = SW_HIDE;
StartInfo.hStdInput = hPipe_ReadHandle;
StartInfo.hStdOutput = hPipe2_WriteHandle;
::CreateProcess(NULL, "算命大师.exe", NULL, NULL, true, 0, NULL, NULL, &StartInfo, &PiInfo);
父进程把用户输入的日期写道管道1的写句柄上,传给算命大师原始版程序
GetDlgItem(IDC_EDIT_DATE)->GetWindowsText(csDate);
::WriteFile(hPipe1_WriteHandle, csDate, nLen, &writeBytes, NULL);
父进程读取管道2的读句柄,以获取算命大师原始版程序的结果,并显示出
ReadFile(hPipe2_ReadHandle, bufferResult, 1023, &IBytesRead, 0);
GetDlgItem(IDC_EDIT_RESULT)->SetWindowText(bufferReuslt);
Ctrl+C
杀死一个进程说明:
Ctrl+C
产生信号SIGINTCtrl+Z
暂停(挂起)一个进程说明:
Ctrl+Z
产生信号SIGTSTPkill -9
杀死一个进程说明:
kill -9
产生信号SIGKILLLinux定义了64种信号,信号用整数1-64表示
信号编号 | 信号名称 | 说明 |
---|---|---|
2 | SIGINT | 进程结束(按键 CTRL+ C能产生) |
6 | SIGABRT | 进程结束 ( 调用 abort函数产生) |
9 | SIGKILL | 进程强制结束(用户不能捕获该信号) |
11 | SIGUSR1 | 用户自定义信号 1 |
14 | SIGALRM | 定时器时间到的信号 |
19 | SIGTSTP | 进程暂停执行(用户不能捕获该信号) |
任务:编写一个死循环程序,当其收到键盘按下的 CTRL+ C信号后,输出“BYE BYE”,然后退出。
#include <iostream>
#include <unistd.h>
int main() {
printf("int_handler set for SIGNIT\n");
while (1) {
printf("go to sleep\n");
sleep(6);
}
return 0;
}
思路:让进程对Ctrl+c的SIGNIT信号用自定义的信号处理函数相应,在自定义信号处理函数输出“BYE BYE”后结束
void signal(
int SigNo, //信号编号
void (* Handle) int //信号自定义处理函数
)
为指定信号注册信号处理函数。当进程收到SigNo信号时,立即自动调用 Handle函数执行。一般在进程初始化时使用该函数注册信号处理函数。
#include <iostream>
#include <unistd.h>
void int_handler(int signum) {
printf("\nBYE BYE \n");
exit(-1);
}
int main() {
signal(SIGINT, int_handler);
printf("int_handler set for SIGNIT\n");
while (1) {
printf("go to sleep\n");
sleep(6);
}
return 0;
}
任务:一个进程(父进程)等待另一个死循环的进程(子进程)先结束并向自己BYE BYE后,自己再结束。
思路:父进程主动发送一个信号给子进程,子进程收到之后 立即准备结束。子进程中设置信号处理函数,提前结束自己,并向父进程“BYE- BYE!“。
void kill(
int PID, //接受信号的目标进程的ID
int SigNo //待发送的信号
)
向着目标进程PID发送SigNo信号
原文:https://www.cnblogs.com/iamfatotaku/p/12591511.html