Tag: 过程

C,让父母和子进程使用信号工作

我试图让我的子进程生成1到9之间的随机数,然后将其发送到我的父进程,每次按下control + Z时它都会显示它。 我也使用dup2()将printf和scanf中的流更改为每个进程的管道读写端。 代码如下所示,按控制C启动主程序。 现在,每当从子节点发送随机数并在父节点上显示时,它等待控制Z被按下。 我面临的问题是,似乎孩子只在再次按下控制Z时运行一次 ,它只运行父代码。 管道也只显示相同的数字,并且永远不会更改,因此不会更新。 我还注意到,如果我在dup函数printf(“a \ n”)之前删除了printf行,它会输出随机数….但是,运行一次的子进程的问题仍然存在。 如果有人可以帮助我,我将不胜感激。 干杯。 #include #include #include #include #include #include #include int selection = 0; int secondSel = 0; int fd[2]; int pipe1; pid_t fork1; void handleSignal(int sig) { if (sig == SIGINT) { selection = 1; secondSel = 1; } if (sig == SIGTSTP) […]

从信号发送管道读取

我想要: 家长流程: 将数据写入管道 向子进程发送信号 儿童过程: 捕获信号后读取数据。 这是我的试用版: #include #include #include #include #include #include #include #include int fd[2]; //Handler – Exiting process, OR reading from pipe void sigHandler(int signumber){ if(signumber == SIGUSR1) { printf(“SIGUSR1 catched.\n”); //So lets read from pipe int read_data = -1; close(fd[1]); read(fd[0], &read_data, sizeof(read_data)); //This printf never gets called printf(“Received data: %s”, […]

如何在不排除exec系列function的情况下更改子进程名称?

我有一个名为mydaemon的守护进程。 现在我想要另一个进程来为我发送一些东西,当我分叉子进程时,它与父进程具有相同的名称。 如果没有exec函数,我怎么能有不同的进程名称?

CreateProcess()不会使用CREATE_NEW_CONSOLE标志创建一个新窗口 – C / C ++

我一直在尝试使用Windows API创建一个使用CreateProcess()的进程。 即使在浏览网页后,我也无法出于某种原因创建新的控制台。 我做的研究: 我使用MSDN示例代码作为我应该在函数中使用的参数的基础: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512%28v=vs.85%29.aspx 我阅读了以下MSDN文章,了解有关如何创建新控制台窗口的信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682528%28v=vs.85%29.aspx 我也读了一个类似的SO问题来解决有同样问题的人: CreateProcess不会在Windows 7下创建其他控制台窗口? 结果: 我已经编写了我将在下面发布的代码,其中包含创建新控制台所需的所有要求,但它没有按预期运行。 我花了很长时间试图自己找到答案,但上面的文章是我通过谷歌找到的唯一相关的。 会发生什么是创建过程,但它在我的C程序控制台中。 我希望能够在没有它的情况下创建程序的程序控制台。 还有其他差异。 如果我在do-while循环中打印了很多字符而没有Sleep()来减慢它的速度,则TerminateProcess()将失败并且拒绝访问,当我按下转义键时程序将崩溃。 这也是不希望的行为。 这是我现在的C程序: #include #include #include #define WIN32_LEAN_AND_MEAN #include #include #define IS_PRESSED( vk ) ( GetAsyncKeyState( vk ) & 0x8000 ) typedef struct process { PROCESS_INFORMATION p_info; STARTUPINFO s_info; } process; void win_error( char * message, int is_exit […]

CreateProcess方法最终出错

我的以下代码有问题: int main(int argc, char **argv) { PROCESS_INFORMATION pi; STARTUPINFO si; printf(“Process %d reporting for duty\n”,GetCurrentProcessId()); GetStartupInfo(&si); CreateProcess(NULL,”notepad.exe”, NULL,NULL,FALSE,DETACHED_PROCESS, NULL,NULL, &si, &pi); printf(“New Process ID: %d\n”,pi.dwProcessId); return(0); } 并且在运行时,我在调试时运行它并且它在CreateProcess方法上崩溃,并显示以下错误消息: “Tests.exe中0x7c82f29c处的未处理exception:0xC0000005:访问冲突写入位置0x00415760。” 这是什么意思???

从进程名称获取进程ID

嗨,我正在尝试使用C语言的Windows API做一个项目。 我项目中的一小部分是获取lsass.exe的进程ID。 我试过下面的程序,但它不会工作。 我已经阅读了有关CreateToolhelp32Snapshot,Process32First,Process32Next函数的任何人可以帮助我解释如何在代码中使用它们。 所以请帮助我。 我是Windows API的初学者,所以如果有人能建议我推荐一本好的电子书,我会很感激。

我如何在C语言的后台exec()进程?

我在进程上做了一个fork和exec(),但是我想在后台运行它。 我怎样才能做到这一点? 我可以避免在上面调用waitpid,但是然后进程永远在那里,等待将它的状态返回给父进程。 还有其他方法吗?

使用信号和sigpipe

我正在进行一项任务,包括使用fork(进程),信号和选择编写程序来处理数据(计算pi)。 我现在正在处理信号,我想我想做的是使用SIGPIPE,所以如果程序捕获它,它会再次尝试写入管道(如果进程试图写入没有读取器的管道,它将被发送SIGPIPE)。 我在main()中使用fork()通过将每个进程发送到worker函数来为它们分配相同的工作。 void worker(int id) { …. (this piece of code is not relevant) if(write(pfd[id][1], &c, sizeof(c)) == -1) printf(“Error occurred: %s\n”,strerror(errno)); } 如何在此函数中实现信号以捕获SIGPIPE并使其再次写入管道? 谢谢!

你如何在C中产生另一个进程?

如何运行外部程序并使用C传递命令行参数? 如果必须使用操作系统API,请包含适用于Windows,Mac和Linux的解决方案。

popen()替代方案

我的问题是这个问题的延伸: popen创造了一个额外的过程 动机: 1)我的程序需要创建一个在文件上tail的子项。 我需要逐行处理输出。 这就是为什么我使用popen因为它返回FILE *。 我可以轻松获取单行,执行我需要做的操作并打印它。 popen的一个问题是你没有得到孩子的pid(在我的情况下是tail命令)。 2)我的程序不应该在孩子完成之前退出。 所以我需要wait ; 但没有pid,我不能这样做。 我怎样才能实现这两个目标? 一个可能的(kludge)解决方案:执行execvp(“tail -f file> tmpfile”)并继续读取tmpfile。 不过,我不确定这个解决方案有多好。