Articles of 等待

哪一个selectwaitpid / wait / waitid?

在fork之后我想在subprocess中使用execl。 execl将执行脚本,这将需要大约120秒的时间。 我尝试了几乎所有与waitpid,waitid和waitid不同的参数(0,WNOHANG等)的组合,但是在所有情况下我都得到了-1的返回值。 所以我想知道在什么时候我需要使用哪个等待函数? 所以我可以集中在一个等待function,使其工作。 我从我的日志中观察到的一个更有趣的事情是,当我在subprocess中什么都不做时,它显示我的父线程是孤立的。 我不知道怎么可能? 我的父母线程如何成为孤儿? #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> int main(void) { pid_t Checksum_pid = fork(); if (Checksum_pid < 0) printf("Fork Failed\n"); else if (Checksum_pid == 0) { execl("/bin/ls","ls",(char *)NULL) ; exit(EXIT_FAILURE); } else { int childStatus; pid_t returnValue = waitpid(Checksum_pid, &childStatus, 0); if (returnValue > […]

如何在Linux中高效地等待RS232的CTS或DSR?

目前,我正在通过以下方式读取串口的CTS和DSR信号: bool get_cts(int fd) { int s; ioctl(fd, TIOCMGET, &s); return (s & TIOCM_CTS) != 0; } 现在我想等到get_cts()返回true。 一个简单的循环不是我认为的最好的解决scheme(因为它是非常耗费资源的)。 void wait_cts(int fd) { while(1) { if(get_cts(fd)) { return; } } } 在Linux上使用C或C ++有没有更好的解决scheme? (我不能使用任何硬件stream量控制,因为我根本不需要串行数据线。)

我怎样才能让Perl等待在system()后台启动的subprocess?

我有一些执行多个参数的shell脚本的Perl代码,为了简化,我假设我有这样的代码: for $p (@a){ system("/path/to/file.sh $p&"); } 之后我想做更多的事情,但是我无法find一种方法来等待所有的subprocess完成,然后再继续。 转换代码使用fork()将是困难的。 有没有更简单的方法?

Bash等待命令,等待超过1个PID完成执行

我最近发表了一个问题,问是否有可能阻止PID被重新使用 。 到目前为止答案似乎是否定的。 (这很好。) 然而,用户迭戈·托雷斯·米兰(Diego Torres Milano)给这个问题添了一个答案,我的问题就是这个问题。 迭戈回答说, 如果你害怕重复使用PID,如果你等待其他答案的解释就不会发生,你可以使用 echo 4194303 > /proc/sys/kernel/pid_max 减less你的恐惧;-) 我不明白为什么迭戈在这里使用了4194303号码,但这是另一个问题。 我的理解是,我遇到了以下代码的问题: for pid in "${PIDS[@]}" do wait $pid done 问题是,我有一个数组中的多个PID,并且for循环将依次运行数组中的每个PID的wait命令,但是我无法预测这些进程将按照它们的PID存储在这个arrays。 即; 可能会发生以下情况: 开始等待数组索引0中的PID 数组索引1中的PID进程终止 新作业在系统上运行,导致存储在PID数组索引1中的PID被重新用于另一个进程 wait终止,因为数组索引0中的PID退出 开始在数组索引0中等待PID, 除了这是一个不同的过程,我们不知道它是什么 重新使用目前正在等待的PID的运行过程永远不会终止。 也许这是邮件服务器的PID或系统pipe理员已经启动的东西。 等待,直到发现下一个严重的Linux错误,系统重新启动或停电 迭戈说: 这不会发生,如果你等待其他答案的解释 即; 我上面所描述的情况是不可能发生的。 迭戈是否正确? 如果是这样,为什么我上面描述的情况不会发生? 或者迭戈不正确? 如果是的话,那么今天晚些时候我会发布一个新的问题。 补充笔记 对我来说,这个问题可能会令人困惑,除非你知道PID是在后台启动的进程的PID。 即; my_function & PID="$!" PIDS+=($PID)

如何使用linux`perf`工具来生成“Off-CPU”configuration文件

Brendan D. Gregg(DTrace书籍的作者)有一个有趣的分析变体: “离线CPU”分析 (和离CPU火焰图 ; 幻灯片2013,P112-137 ),看看线程或应用程序被阻塞不是由CPU执行的,而是等待I / O,页面error handling程序或由于CPU资源不足而被取消预定): 这一次揭示了哪些代码path被阻塞,并在closuresCPU时等待,以及确切的时间。 这与传统的概要分析不同,后者通常以给定的时间间隔对线程的活动进行采样,并且(通常)只在线程正在CPU上执行时检查线程。 他还可以将“非CPU”configuration文件数据和“On-CPU”configuration文件组合在一起: http : //www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html Gregg给出的例子是使用dtrace ,这在Linux操作系统中通常是不可用的。 但是也有一些类似的工具(ktap,systemtap,perf),而且我认为perf具有最广泛的安装基础。 通常通过执行生成的CPU上的configuration文件(这些function在CPU上更频繁地执行)。 如何将Gregg的Off-CPU示例转换为Linux中的perf分析工具? PS:在LISA13,p124的幻灯片中,有一个关于off-CPU火焰图的systemtap变体的链接:“ Yichun Zhang创build了这些,并且一直在Linux上使用SystemTap来收集configuration文件数据,参见:• http:// agentzh .org / misc / slides / off-cpu-flame-graphs.pdf “ ”(CloudFlare Beer Meeting于2013年8月23日)

有没有办法使PowerShell等待安装完成?

我有一个Windows软件包列表,我使用下面的命令通过PowerShell进行安装: & mypatch.exe /passive /norestart mypatch.exe正在从一个列表中传递,它不会等待之前的安装完成 – 它只是继续前进。 它构build了一个正在等待安装的巨大安装窗口。 另外,我不能使用$LASTEXITCODE来确定安装是成功还是失败。 在开始下一步之前,有没有办法让安装等待呢?

如何等待,直到我的batch file完成

我正在做一个程序,我需要启动cmd,并启动一个batch file。 问题是我正在使用MyProcess.WaithForexit(); 我认为它不会等待batch file处理完成。 它只是等到cmdclosures。 我的代码到目前为止: System.Diagnostics.ProcessStartInfo ProcStartInfo = new System.Diagnostics.ProcessStartInfo("cmd"); ProcStartInfo.RedirectStandardOutput = true; ProcStartInfo.UseShellExecute = false; ProcStartInfo.CreateNoWindow = false; ProcStartInfo.RedirectStandardError = true; System.Diagnostics.Process MyProcess = new System.Diagnostics.Process(); ProcStartInfo.Arguments = "/c start batch.bat "; MyProcess.StartInfo = ProcStartInfo; MyProcess.Start(); MyProcess.WaitForExit(); 我需要等到batch file完成。 我怎么做?

如何使主窗口等待,直到一个新打开的窗口closures在C#WPF中?

我对WPF和C#都是新手,请耐心等待。 我有一个主窗口打开一个新窗口。 现在这个新窗口是否覆盖文件的提示,主窗口访问新窗口中的公共variables来检查提示的结果。 但是我不能让主窗口处理等待新窗口closures。 Window1 Win = new Window1(); Win.Show(); if (Win.pr_res == 1) { abc.Text = "File to be overwritten"; File.Delete(_destination); Start(); } else { abc.Text = "Operation Aborted"; } 我尝试添加一个while循环来检查主窗口中的另一个公共布尔值,但是这只是挂起了整个程序。 while(!_closecheck); 任何build议,欢迎。