急!子进程在运行,结束父进程会出错,怎么解决? [问题点数:40分,结帖人zhangting1987]

Bbs1
本版专家分:0
结帖率 100%
Bbs6
本版专家分:8716
Bbs1
本版专家分:0
Bbs6
本版专家分:8716
Bbs1
本版专家分:0
Bbs2
本版专家分:443
ckc
Bbs7
本版专家分:11343
Blank
黄花 2018年3月 Linux/Unix社区大版内专家分月排行榜第二
2002年6月 其他开发语言大版内专家分月排行榜第二
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs2
本版专家分:235
父进程等待子进程结束 waitpid wait
我们一直在强调一个概念就是进程是一个程序执行的实例,是内核在虚拟概念下创建的实体,它实例化的体现在用户态就是程序代码和代码使用的变量(存储空间),在内核态就是内核为我们每个进程所保存的数据结构(状态信息)等。 当一个进程由于某种原因停止时,内核并不是直接将为它保存的状态信息从内核移除,相反,进程会一直被保持在一种已经终止的状态,直到被它的<em>父进程</em>回收,当<em>父进程</em>回收已经终止的<em>子进程</em>时,内核会将<em>子进程</em>的
子进程wait/waitpid//子进程结束父进程会等待子进程吗?
waitpid第三个参数什么意思?<em>子进程</em>exit是退出,用return什么作用?rn[code=C/C++]rn#include rn#include rn#include rn#include rnint main()rnrn int pid1 = fork();rn int pid2;rn if(pid1>0) pid2 = fork();rn if(pid1==0)//<em>子进程</em>一rn printf("<em>子进程</em>一开始<em>运行</em>,马上睡5s\n");rn sleep(5);rn exit(123);rn rn if(pid2==0)//<em>子进程</em>二rn printf("<em>子进程</em>二开始<em>运行</em>,马上睡3s\n");rn sleep(3);rn exit(234);rn rn //以下是<em>父进程</em>rn printf("<em>父进程</em>开始等待<em>子进程</em>一\n");rn int r1 = 0;rn waitpid(pid1,&r1,0); rn printf("<em>父进程</em>开始等待<em>子进程</em>二\n");rn int r2 = 0;rn waitpid(pid2,&r2,0);rn if(WIFEXITED(r1))rn printf("<em>子进程</em>一的返回码:%d\n", WEXITSTATUS(r1));rn rn if(WIFEXITED(r2))rn printf("<em>子进程</em>一的返回码:%d\n", WEXITSTATUS(r2));rn rnrnrnrn[/code]
子进程怎么得到父进程句柄?
我想使<em>子进程</em>得到<em>父进程</em>句柄,用管道好像不行啊,<em>怎么</em>弄啊?rn最后给段代码
Linux父进程创建子进程的方法,监控子进程结束
一、<em>父进程</em>创建<em>子进程</em>,使用fork(), 一次fork() 两次返回,一次返回的是<em>父进程</em>自己,一次返回的是<em>子进程</em>的<em>运行</em>空间。 二、<em>父进程</em>必须监控<em>子进程</em>的<em>运行</em>状态,等待<em>子进程</em>退出后,使用wait()进行关闭,否则,如果<em>父进程</em>先退出,<em>子进程</em>就没有父亲了,就变成了僵尸进程,此时退出时,就会被系统进程init监控到,然后由系统进程init进行关闭和释放资源。 三、<em>运行</em>下列的代码,结果如下:
请问父进程怎么控制子进程
我的意思是waitpid是不是加上nowait是不是可以拿到所有想要的<em>子进程</em>的状态?rn假如我的<em>子进程</em>已经退出或者死循环了它能不能知道?
python subprocess 怎么子进程跟随父进程一同结束
我再Pyqt 里用 subprocess.popen() <em>运行</em>了一个 exe程序。 由于要捕获输出,所以rnstdout =subprocess.PIPE.rnrn用 while self.proc.poll():rn do sthrn rn rn可是,当我关闭窗口,这个被调用的exe 还在<em>运行</em>。我要<em>怎么</em>把它跟随窗口一同<em>结束</em>呢?
父进程结束怎么让fork的所有子进程结束
<em>父进程</em><em>结束</em>时<em>怎么</em>让fork的所有<em>子进程</em>也<em>结束</em>?
父进程死了,子进程会挂吗?
Unix下面进程之间有这样的关系,windows下面有么?rnrn能否设置什么属性或者api,使得<em>父进程</em><em>结束</em>的时候,它创建的所有的<em>子进程</em>立刻<em>结束</em>? 是不是在创建进程的时候有什么参数?
关于子进程结束父进程怎么判断的问题,谢谢大家的帮忙!
在主进程我调用了signal函数rnif(signal(SIGCHLD, childexit) == SIG_ERR)rnrn perror("signal error\n");rn return -1;rnrnrn之后,我调用fork函数和exec函数,启动了2个<em>子进程</em>。当<em>子进程</em><em>结束</em>后,调用childexit这个函数。rnvoid childexit(int sig)rnrn 我想在这里判断究竟是哪个进程<em>结束</em>了,请问大家如何做才能判断是哪个进程<em>结束</em>了rnrn sig这个参数,我也没用上rnrnrn谢谢大家指教小弟该<em>怎么</em>实现这个功能。rn
父进程创建子进程
操作系统实验 <em>父进程</em>创建<em>子进程</em>,显示时间,可选择一个窗口或两个窗口显示
有关父进程子进程的问题?
假设有一程序a.exe,其中用CreateProcess函数启动了b.exe,这时a是否就是b的<em>父进程</em>呢?如果没有a的源程序,只有b的源程序的情况下,能否得到a的有关信息呢?比如进程ID,窗口句柄等。多谢大家!
子进程如何杀死父进程
<em>子进程</em>如何杀死<em>父进程</em>?
关于父进程子进程的通讯
我在<em>父进程</em>中建立了一个链表。我通过匿名管道把链表的指针传给了<em>子进程</em>,请问<em>子进程</em>能不能通过这个指针访问<em>父进程</em>链表里的数据啊,如果不能,我要怎才能访问<em>父进程</em>的链表啊
父进程子进程管道
int main() { int pfd[2]; char test[10] = &quot;hello&quot;; pid_t pid; int n = 0; int status; pipe(pfd); pid = fork(); if (pid == 0) { close(pfd[0]); //while (1); n = write(pfd[1...
awk 子进程 父进程 交互
(3)awk读取shell中的变量 可以使用-v选项实现功能      b=1 b=1cat f      apple ? 1 $awk -v var=$b '{print var, $var}' file 1 apple 至于有没有办法把awk中的变量传给shell呢,这个问题我是这样理解
子进程继承父进程缓冲区
该课程将讲授有关对操作系统的基本操作、liunx环境下的程序设计等。
Console 子进程 父进程
Console <em>子进程</em> <em>父进程</em>Console <em>子进程</em> <em>父进程</em>Console <em>子进程</em> <em>父进程</em>Console <em>子进程</em> <em>父进程</em>
父进程KILL子进程
有关KILL进程的方法。代码大致如下,rnrn在建立一个进程后<em>运行</em><em>子进程</em>Func2(),<em>子进程</em>中又建了一个孙进程Func3();rnrn我现在想达到的效果是:Func2()在创建孙进程Func3()的时候,先判断上次建立的进程是否存在,如果存在则KILL掉,重新建立孙进程Func3()。rnrn能否用kill(getpid(),SIGKILL)方法来实现,如果能实现,能否详细说明一下?rnrn还是使用_EXIT? exit(0)?请指教。rnrnVoid func1()rnrnrnrn pid_t pidrnrn pid =fork();rnrn Switch(pid)rnrn rnrn Case -1:rnrn Break;rnrn Case 0:rnrn Func2();rnrn Default:rnrn Break;rnrn rnrnrnrnVoid func2()rnrnrnrn pid_t pidrnrn [color=#FF0000]kill(getpid(),SIGKILL);//如果上次存在一个进程,则先KILL再创建。[/color]rnrn pid =fork();rnrn Switch(pid)rnrn rnrn Case -1:rnrn Break;rnrn Case 0:rnrn Func3();rnrn Default:rnrn Break;rnrn rnrn While(1)rnrn rnrn ………………..rnrn rnrnrnrnVoid func3()rnrnrnrn While(1)rnrn rnrn ………………..rnrn rnrnrnrnMain()rnrnrnrn …..rnrn func1();rnrn …..rnrnrnrn
子进程父进程的联系
这方面不是很清楚,操作系统在哪里保存着这样一条链?rn还有就是 能不能改变这种父子关系,比如 修改我自己程序的<em>父进程</em>信息?rn
子进程如何关闭父进程
在Process A中 Process.Start 一个Process Brnrn问题:如何在Process B 中 <em>结束</em> Process A?rnrn谢谢。
关于父进程子进程的问题
我写了个简单的<em>父进程</em>和<em>子进程</em>的程序,但是多次执行后,发现顺序不一样,有时候输出是:rnthis is child processrnMy PID(child) is 6374rnMy parent PID is 6373rnThis is parent processrnMy PID(parent)is 6373rnMy child PID is 6374rn而有时候输出是:this is child processrnThis is parent processrnMy PID(parent)is 6375rnMy child PID is 6376rnMy PID(child) is 6376rnMy parent PID is 6375rn请高手指教哈rnint main()rnrn char buf[100];rn pid_t cld_pid;rn int fd;rn int * status;rnrn if((fd = open("temp",O_CREAT|O_TRUNC|O_RDWR,S_IRWXU)) == -1)rn rn printf("open error %d \n",errno);rn exit(1);rn rn strcpy(buf,"this is parent process write\n");rnrn if((cld_pid = fork()) == 0)rn rn strcpy(buf,"this is child process write \n");rn printf("this is child process \n");rn printf("My PID(child) is %d\n",getpid());rn printf("My parent PID is %d\n",getppid());rn write(fd,buf,strlen(buf));rn close(fd);rn exit(0);rn rn elsern rn printf("This is parent process \n");rn printf("My PID(parent)is %d \n",getpid());rn printf("My child PID is %d\n",cld_pid);rn write(fd,buf,strlen(buf));rn close(fd);rn rn wait(status);rn return 0;rnrn
Node父进程子进程
<em>子进程</em> 共享内存空间 <em>子进程</em>之间互相通信实现信息交换 <em>子进程</em>之间共享端口,分配请求 基本操作 /**************stdin*************/ process.stdin.resume(); process.stdin.on(&quot;data&quot;, function(chunk) { process.stdout.write(&quot;进程收到数据:&quot; + chunk...
父进程获取子进程异常
用createprocess创建一个进程来<em>运行</em>一个肯能含有<em>运行</em>错误的可执行文件,请问在不用debug_process的情况下能不能获取<em>子进程</em>的异常或者是判断<em>子进程</em><em>出错</em> 并且不让提示框出现
Python中父进程子进程
from multiprocessing import Process import time ##从程序中启动进程的两种方式: def task(i): print('%s start!'% i) time.sleep(2) print('%s stop!' % i) #方法一: if __name__ == '__main__': #在window系...
python3 子进程父进程
对象.join() #等待<em>子进程</em>执行<em>结束</em>
父进程子进程之间的 困惑!
#include rn#include rn#include rn#include rnrnint main(void)rnrn pid_t pid2;rn pid_t pid=fork();rn if(pid==0)rn rn int j ;rn for(j=0;j0)rn rn int i;rn for(i=0;i ty.txtrn输出结果却是:rnrnchild: 0rnchild: 1rnchild: 2rnchild: 3rnchild: 4rn pid2 rnThis is the end !rnparent: 0rnparent: 1rnparent: 2rnparent: 3rnparent: 4rn pid2 rnThis is the end !rnparent: 0rnparent: 1rnparent: 2rnparent: 3rnparent: 4rnThis is the end !rnchild: 0rnchild: 1rnchild: 2rnchild: 3rnchild: 4rnThis is the end !rnrn为什么将结果写进文件 就是这样一个形式了?rnrn大家抽个时间 解释撒!rn谢谢哈!
父进程子进程后执行
刚看APUE里的多进程那里。 <em>父进程</em>和<em>子进程</em>的执行顺序是不确定的,我先让<em>父进程</em>在<em>子进程</em>执行完之后再执行,该如何做?rnrn测试代码如下:rn[code=C/C++]#include rn#include rn#include rnrnint main(void)rnrn pid_t pid = fork();rn int status;rn rn if (pid == -1)rn printf("fork process error\n");rn else if (pid == 0)rn rn printf("I am a child process, my processId is:%d\n", getpid());rn _exit(0);rn rn elsern rn pid_t wPid = waitpid(-1, &status, WNOHANG);rn if (wPid > 0)rn rn if (WIFEXITED(status))rn rn if (WEXITSTATUS(status) == 0)rn rn printf("I am a father process, my processId is:%d\n", getpid());rn rn rn rn rn rn return 0;rn[/code]rnrn发现<em>怎么</em>从2次开始执行的时候就只打印了<em>子进程</em>再没打印<em>父进程</em>那里了,为什么啊?
父进程退出,子进程open
我最近在学习进程间的FIFO通信,下面的代码中111111111已经打印了,但是222222222和333333333都没有打印,很奇怪,望各位大神指点。rnint main()rnrn pid_t pid;rn char *path = "./file.fifo";rnrn if((pid = fork()) == 0) // clildrn int fdfifo, fd;rn int nread;rn char buf[BUF_LEN] = 0 ;rnrn mkfifo(path, 0777); rnrn printf("111111111\n");rnrn if((fdfifo = open(path, O_WRONLY))) == -1) rn printf("22222222\n");rn rn printf("333333333333\n");rnrn if((fd = open("./fifo.c", O_RDONLY)) == -1)rn err_exit(1, "open ./fifo.c");rnrn while((nread = read(fd, buf, BUF_LEN - 1)) > 0) rn printf("%s", buf);rn memset(buf, 0, BUF_LEN);rn rn else if(pid > 0) // parentrn exit(0);rn rnrn
父进程干掉子进程
#include stdio.h> #include sys/types.h> #include unistd.h> #include signal.h> #include ctype.h> #define MAX_CHILD_NUMBER 10 #define SLEEP_INTERVAL 1 int proc_number=0; void do_something();
父进程子进程,程序设计
#include rn#include rn#include rn#include rn#include rnrnint main(int argc, char *argv[])rnrn pid_t pid;rn char * message;rn int n;rn int exit_code;rn pid = fork();rn swith (pid)rn rn case -1:rn perror("fork failure");rn exit(1);rn case 0:rn message = "this is child";rn n=5;rn exit_code = 37;rn break;rn default:rn message = "this is parent" rn n=3;rn exit_code = 0;rn break;rn rnrn for(;n>0;n--)rn rn printf("%s\n",message);rn sleep(1);rn rn if ( 0 != pid)rn rn printf("***this is parent waiting***");rn int sat_val;rn pid_t child_pid;rn child_pid = wait(&sat_val);rn printf("child has finished PID = %d\n",child_pid);rn if (WIFEXITED(sat_val))rn printf("child exited with code %d\n",WEXITSTATUS(sat_val));rn elsern printf("child terminated abnormaling\n");rn rn exit(exit_code);rnrnrn代码的意图是:这是linux程序设计中的代码,<em>父进程</em>利用fork产生一个<em>子进程</em>,<em>父进程</em>利用wait函数等待子进行的<em>结束</em>,通过if ( 0 != pid).....来进行,rn但是,我的程序在虚拟机上<em>运行</em>后,发现if ( 0 != pid).....程序段执行了两次,一次显示正常退出(child exited with code 37),另一次异常退出(child terminated abnormaling)rn请各位朋友指教是什么问题,多谢!!!
父进程操作子进程问题
在核心编程的书上说用CreateProcess来注入代码,有关<em>父进程</em>保存<em>子进程</em>内存地址空间的机器指令,和将手工编写的机器指令写入到内存地址这要<em>怎么</em>实现?是不是用ReadProcessMemory()和WriteProcessMemory()来实现
父进程子进程通信的问题
#include rnrn#include rnrn#include rnrn#include rnrn#include rnrnvoid print(int sig)rnrnrnrn printf("%d\n", getpid());rnrnrnrnint main(void)rnrnrnrn static int count = 0;rnrn pid_t pid;rnrn int i;rnrn for(i=0; i);rnrn exit(1);rnrn rnrn else if(pid == 0)rnrn rnrn signal(SIGCHLD, print);rnrn pause();rnrn exit(0);rnrn rnrn elsernrn rnrn sleep(1);rnrn kill(pid, SIGCHLD);rnrn exit(0);rnrn rnrn return 0;rnrnrnrn需要停止5个<em>子进程</em>,到最后怎样只有一个被停止了?
C例子:父进程子进程
该程序是我写的博客“一起talk C栗子吧(第七十九回:C语言实例--<em>父进程</em>与<em>子进程</em>)”的配套程序,共享给大家使用
父进程异步等待子进程
<em>父进程</em>自定义SIGCHLD信号的处理函数,并采用非阻塞方式等待,当<em>子进程</em>退出时,会向<em>父进程</em>发送信号,<em>父进程</em>会进行回收。 当有10个<em>子进程</em>退出时,会给<em>父进程</em>发送10个信号,但由于只会记录一次,所以只能回收一次,我们让<em>父进程</em>一直回收,当<em>子进程</em>全部被回收,waitpid()返回-1,跳出循环。#include #include #include <std
子进程父进程的关系和示例
<em>子进程</em>一般继承<em>父进程</em>:用户信息、权限、目录信息、信号信息、环境表、共享存储段和资源限制。 例如:文件描述符表(包含偏移量)是可以共享的: #include #include #include #include #include #include #include int main() { int fd = open("a.txt", O_RDWR);
父进程子进程、进程和线程
<em>子进程</em>继承的来自<em>父进程</em>的属性: ● ● ● ● ● ● ● ●已打开的文件描述符 ●实际用户ID、实际组ID、有效用户ID、有效组ID ●附属组ID ●进程组ID ●会话ID
父进程子进程的通信问题
public class ReadStandered rnrn public static void main(String[] args) rn System.out.println("hello world!");rnrn rnrnpublic class WriteToProcess rn public static void main(String[] args) throws Exception rn PrintStream ps = null;rn BufferedReader br = null;rn Process p = null;rnrn p = Runtime.getRuntime().exec("java ReadStandard");rn br = new BufferedReader(new InputStreamReader(p.getInputStream()));rn String buff = null;rn while((buff=br.readLine())!=null)rn System.out.println(buff);rn rn br.close();rn rn
父进程子进程的关系
想问下,linux c编程中,使用fork()函数复制了一个进程。那么在该程序中,<em>父进程</em>和<em>子进程</em>的<em>运行</em>情况是怎样的呢。是并行的还是,先<em>运行</em><em>父进程</em>,在<em>运行</em><em>子进程</em>,或者其他呢........
父进程子进程的问题
我用CreateProcess创建了另一个进程,这个<em>子进程</em>不是我自己的程序!但我想等待<em>子进程</em>,完全启动后才对<em>子进程</em>,进行一些操作!有什么办法?WaitForInputIdle那些函数都试了,都是初始化好就返回了。用sleep<em>父进程</em>老是卡死,<em>子进程</em>在任务管理器看得到。但界面都没启动,不知道<em>怎么</em>回事!有什么办法能等待<em>子进程</em>完全启动后<em>父进程</em>才工作呢?rn
关于子进程父进程的问题
您好,不耽误您的时间,直接描述问题:rn 两个独立的程序A,B,A是主程序,B是升级程序rn 当我点击主程序A时,这时提示升级窗口,然后启动<em>子进程</em>B进行升级,<em>子进程</em>B启动后,把<em>父进程</em>A(主窗口)关闭,<em>子进程</em>B更新完后,要重新启动更新的<em>父进程</em>A,这时问题出现了,每次启动时都不正常,相应的Socket不能正常接发消息,还有一个问题就是,当我B启动后,正在进行更新时,A已经不存在了,这时双击桌面A时,启动也不正常.多谢指教!!!
父进程子进程的继承概念?
我不太清楚 A进程创建了1个B进程后,B进程都去继承A进程的什么句柄??rnrn并且这样的继承有什么作用??
父进程中关闭子进程的问题??急待解决
各位大侠你们好:rnrn 现在我遇到了一个问题,我在<em>父进程</em>中,打开一个fork的<em>子进程</em>,现在又想要在<em>父进程</em>中关闭该fork<em>子进程</em>,并且要不影响<em>父进程</em>的<em>运行</em>。我该<em>怎么</em>做呢?谁能帮帮我!rnrn 这是我的代码,不知道哪里有问题:rnrn int main(void)rnrn pid_t pid;rn rn int i;rn rn if( (pid = fork()) == 0)rn rn while(1)rn rn sleep(1);rn sleep(1);rn rn printf("ok!\n");rn rn rn while(1)rn rn scanf("%d\n",i);rnrn printf("hello\n");rn rn kill(pid,SIGTERM);//关闭<em>子进程</em>forkrn rn return 0;rn rnrn这个程序关闭不了fork<em>子进程</em>,请问大家该<em>怎么</em>该呢?rn
父进程创建子进程子进程如何得到父进程的句柄或PID?
<em>父进程</em>创建<em>子进程</em>,<em>子进程</em>如何得到<em>父进程</em>的句柄或PID?rn<em>父进程</em>用CreateProcess(PWideChar('GiverProject.exe'),nil , nil, nil, True, 0, nil, nil, siStartupInfo, piProcInfo),创建了GiverProject.exe的<em>子进程</em>,而且bInheritHandles继承一项设为True了。rn那<em>子进程</em>中如何得到<em>父进程</em>的句柄或PID呢?
【急】如何在子进程获取父进程的窗口句柄?
如题rn请教各位rn用 CreateProcess或ShellExecute 打开的程序如何获得打开他的窗口的句柄(我需要向父窗口发送消息)rnrn当然先排除findwindow、或通过命令行参数传递,有其他方法吗?
创建多个子进程子进程有共同的父进程
创建多个<em>子进程</em>,<em>子进程</em>有相同的<em>父进程</em>。在后台开发的时候有很好的代码参照
spawn-fcgi绑定端口,绑定进程结束子进程结束会继承父进程端口
这些天遇到了一个端口继承的问题,使用spawn-fcgi将程序和端口绑定,程序中开一个<em>子进程</em>,kill掉<em>父进程</em>,<em>子进程</em>会继承<em>父进程</em>的端口。 图中是一个简单的demo,该进程绑定了6666端口,并且通过subprocess启动了一个while.py进程,while进程只有一个while(1)循环,确保进程不<em>结束</em>。 可以看到6...
用createprocess()建立子进程父进程结束子进程,为何结束不掉?
用createprocess()创建<em>子进程</em>,<em>子进程</em>用settimer()一直等待。想用<em>父进程</em><em>结束</em>掉该<em>子进程</em>。rnrn在创建<em>子进程</em>的时候,将<em>子进程</em>的句柄保存起来,在<em>父进程</em>里用TerminateProcess()<em>结束</em><em>子进程</em>,<em>结束</em>不掉,用getlasterror()查看,输出error 288,Attempt to release mutex not owned by caller.rnrn不想用进程间通讯,让<em>子进程</em>自己退出,就是要用TerminateProcess()<em>结束</em>之。rnrn别外在该进程中用TerminateProcess(GetCurrentProcess(),GetExitCodeProcess(GetCurrentProcess(),&dexit))<em>结束</em>自己,无任何反应,用getlasterror()也无任何输出。
子进程怎么获得父进程的PID号啊
<em>子进程</em><em>怎么</em>获得<em>父进程</em>的PID号啊rn有什么函数吗?或者用什么方法获得
子进程怎么知道(判断)父进程被关闭了
<em>父进程</em>启动了多个<em>子进程</em>(默认情况下10个<em>子进程</em>),现在问题是:rn<em>子进程</em><em>怎么</em>知道(判断)<em>父进程</em>被关闭了(或者说<em>父进程</em>被异常终了了,没来得及通知<em>子进程</em>)rn要求在Unix,Windows系统下的方案。rnrn谢谢!!!
父进程怎么判断子进程退出
rn VTRP_TypeItems m_vtrAllTypeItems;(这个变量里面存的是<em>子进程</em>队列) vector类型rnrn每个元素的类型是下面的一个结构体:rn struct DS_ProcessItem : rn rn QProcess* pProcess;rnrn QString strProcessName; // 可执行文件路径及文件名rn QString strExeFile; // 可执行文件路径及文件名rn QString strParam; // 命令行参数rn bool bNewWindow;rn bool bShow;rnrn bool bRegisted;rn bool bReserved;rnrn QString strExtraData; // 扩展参数rnrn QDateTime dtUpdateTime;rn rn ;rnrn本来想根据<em>子进程</em>的pid判断它是否退出,但是rn根据 QProcess的 PID()方法获得<em>子进程</em>的PID,但是<em>子进程</em>退出后,pid也不会变为0,不知道还有什么办法。
父进程被灭了,子进程怎么灭?
<em>父进程</em>被强制<em>结束</em>了,注意是强制<em>结束</em>了,<em>子进程</em><em>怎么</em>关掉rnrn我也写了TerminateProcess(processInfo.hProcess,0);,但是根本就不被执行到rnrn我是SDK编程rnrnlike this rnwhile (GetMessage(&msg, NULL, 0, 0)) rnrn if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) rn rn TranslateMessage(&msg);rn DispatchMessage(&msg);rn rnrnTerminateProcess(processInfo.hProcess,0);rnrn
父进程fork一个子进程后退出,子进程stdin怎么无效了?
<em>父进程</em>用fork()创建一个<em>子进程</em>后,没有使用wait()等待<em>子进程</em><em>结束</em>,rn而是<em>父进程</em>自己先退出。rnrn结果,<em>子进程</em>的stdin变的无效了,也就是不能通过终端向<em>子进程</em>输入任何数据,rnctrl-c也不能<em>结束</em><em>子进程</em>。rnrn请问如何在<em>父进程</em>退出后,使<em>子进程</em>的stdin继续可以获得输入?rnrn谢谢
父进程创建一个子进程,然后父进程退出.会不会影响子进程运行?
谢谢
怎样在子进程结束整个程序,包括父进程等?
如题,如果用exit(1)的话,虽然能把程序<em>结束</em>了,但好像有些资源没有清除。比如如果<em>父进程</em>有一个socket处于等待状态。
如何让子进程父进程结束时(任意情况)也自动结束
另外,我只知道该进程的名字,我<em>怎么</em>在另一个程序开始<em>运行</em>时知道之前所述进程是否在<em>运行</em>?目前知道的办法是:ps,然后查找。谁有高见?多谢!
linux高手请问,父进程如何发送sigusr1消息结束子进程
linux高手请问,<em>父进程</em>如何发送sigusr1消息<em>结束</em><em>子进程</em>,我想实现一个<em>父进程</em>发送信号重启<em>子进程</em>的程序,请高手帮忙啊
为什么子进程结束的时候父进程没有收到SIGCHLD?
如下的小程序rn[code=c]rn#includern#includern#includern#includernvoid f(int sno)rn printf("%d\n");rnrnint main(void)rn signal(SIGCHLD,f);rn pid_t pid=fork();rn if(pid==0)//childrn rn printf("child,parant=%d\n",getppid());rn else//parentrn printf("me=%d,child=%d\n",getpid(),pid);rn rn return 0;rnrn[/code]rn执行的结果是:rn# g++ sc.cpp && ./a.outrnme=16212,child=16213rnchild,parant=16212rnrn看起来我的signal函数注册的f函数,并没有执行啊。不是说<em>子进程</em>退出的时候<em>父进程</em>就会收到SIGCHLD么?rn
多个子进程结束时刻未知,父进程如何回收僵死进程??
[size=14px]如果<em>父进程</em>创建了很多<em>子进程</em>,而且<em>子进程</em>的<em>结束</em>顺序(或时刻)是未知的,rn那么当<em>子进程</em><em>结束</em>的时候,<em>父进程</em>怎样才能调用wait()或waitpid()让<em>子进程</em>退出僵尸状态呢?rnrn考虑使用sigprocmask+sigsuspend,先将SIGCHLD信号屏蔽,然后统计fork了多少个<em>子进程</em>(total个),<em>父进程</em>中在 解除阻塞SIGCHLD之前,调用sigsuspend,防止在解除之前有SIGCHLD信号发生,但是在解除阻塞SIGCHLD之后,如何用pause()函数再等待下一个SIGCHLD信号有时会造成一直等待的问题,因为<em>子进程</em>何时退出是不一定的嘛,这种情况应该怎样<em>解决</em>呢??[/size]rnrn希望大家多给个思路[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]
高分求助:如何截获父进程子进程结束信号?
有没有一种方式可以实现<em>子进程</em>死亡<em>父进程</em>可以得到通知,<em>父进程</em>死亡,<em>子进程</em>可以得到通知?记得是可以实现的,曾经我见过这样的程序,如果有哪位知道<em>怎么</em>做,或者有这样的例子程序,希望不吝赐教!
python subprocess模块开启的子进程不随父进程一同结束问题解决
  最近用subprocess模块的Popen函数开启<em>子进程</em>,<em>运行</em>flask框架时出现一个问题,那就是调用subprocess模块的脚本<em>运行</em><em>结束</em>后,在其fork出的<em>子进程</em>中<em>运行</em>的flask框架并未关闭,这就导致在开发阶段关闭该<em>子进程</em>十分麻烦,经过一番查找测试,通过使用wait()方法阻塞<em>父进程</em>或捕获关闭信号(ctrl+c)后关闭<em>子进程</em>便可轻易<em>解决</em>.   首先我们来看看出现的问题,这是启动两个fl...
如何关闭父进程启动的子进程.....?
using System;rnusing System.Collections.Generic;rnusing System.Text;rnusing System.Threading;rnrnnamespace ConsoleApplication1rnrn class Programrn rn Thread th;rnrn void bbbbbbb()rn rn th = new Thread(thStart);rn th.Start();rn rnrn void thStart()rn rn Thread[] ths = new Thread[5];rn System.Threading.ThreadStart startThread = new System.Threading.ThreadStart(thsStart);rn for (int t = 0; t < 5; t++)rn rn ths[t] = new Thread(thsStart);rn ths[t].Name = t.ToString();rn ths[t].Start();rn rn rnrn void thsStart()rn rn for (int i = 0; i < 10; i++)rn rn if (i == 5)rn rn th.Abort();rn rn Console.WriteLine(i.ToString() + "\t" + Thread.CurrentThread.Name);rn rn rnrnrn static void Main(string[] args)rn rn Program p = new Program();rn p.bbbbbbb();rn rn rnrnrnrn在 main() 方法内启动呢进程 th ...在 th 内启动呢进程 ths....rnrn如何在 main() 的进程内关闭正在执行的 th 和 ths 进程呢.rnrn我使用呢..th.Abort(); 可是<em>子进程</em> ths 还在执行
杀死父进程子进程脚本命令
##! @TODO: <em>结束</em>指定进程及其派生出的所有进程 ##! @IN: $1 => 进程pid ##! @OUT: 0 => success; 1 => failed function recursive_kill() {     local pids=(`ps -ef | awk '{if($3 == ppid){print $2;}}' ppid=$1`)     #echo "
Linux下父进程与两子进程管道通信
#include #include #include #include int main() {int fd[2]; pid_t pid1,pid2; char sendbuf[50],revbuf[50]; pipe(fd); pid1=fork(); if(pid1==0) {lockf(fd[1],1,0); sprintf(sendbuf,"child1 is sending the me
Linux下父进程异步等待子进程
1. 背景知识   我们可以使用wait和waitpid函数清理僵死进程,<em>父进程</em>可以阻塞等待<em>子进程</em><em>结束</em>,也可以非阻塞地查询是否有<em>子进程</em><em>结束</em>等待清理(也就是轮询的方式)。采用第一种方式,<em>父进程</em>阻塞了就不能处理自己的工作了;采用第二种方式,程序实现复杂。其实,<em>子进程</em>在终止时会给<em>父进程</em>发SIGCHLD信号,该信号的默认处理动作是忽略,<em>父进程</em>可以自定义SIGCHLD信号的处理函数,这样<em>父进程</em>只需专心处理自
3.4.7.父进程wait回收子进程
本课程对linux中进程及其相关的各种知识做了系统性讲述,包括:进程的起始和环境、父<em>子进程</em>、exec族函数、守护进程、进程间通信等。学完本节后学生可以对进程的概念有更深入理解和更全面认识。
父进程等待子进程退出(二)
n 物联网技术离不开Linux开发基础nnn Linux进程是很重要的开发概念,通过本套视频,掌握Linux进程的开发,<em>解决</em>Linux进程疑问。nnn 是Linux系统编程小白的向导,是Linux系统开发工程师的视频字典,欢迎观看!n
QProcess父进程子进程发送数据
start创建了一个<em>子进程</em>,但是虽然<em>父进程</em>可以调用write写数据给<em>子进程</em>,但是<em>子进程</em><em>怎么</em>能接受到<em>父进程</em>的数据呢,用QFile打开stdin?里面的数据<em>怎么</em>读呢。<em>子进程</em>往<em>父进程</em>传送的数据可以传送,在网上可以搜索到。请问我改<em>怎么</em>办。rn我用的是windows
父进程捕获子进程的输出问题
test.java rnclass testrn rn public static void main(String args[]) rn rn System.out.print("aaaaa");rn System.out.print("bbbbb");rn System.out.print("ccccc");rn System.out.print("\n");rn .......... //一系列的print与println的交替无序使用rn System.out.println("aaaaa");rn System.out.println("bbbbb");rn System.out.println("ccccc"); rn rn rnrnrntest1.javarnimport java.io.*;rnpublic class test1rnrn public static void main(String[] args)rn rn Process p=null;rn Runtime run = Runtime.getRuntime();rn String cmd;rn tryrn rn cmd="cd F:\\java";rn run.exec("cmd /c "+cmd);rn cmd="javac test.java";rn p = run.exec("cmd /c "+cmd);rn tryrn rn p.waitFor();rn rn catch(InterruptedException e1)rn p = run.exec("cmd /c "+"java test"); rn InputStreamReader ir=new InputStreamReader(p.getInputStream()); rn LineNumberReader input = new LineNumberReader (ir); rn String all="";rn String line; rn while((line = input.readLine ()) != null) rn rn all=all+line; //这里有问题,无法实现与<em>子进程</em>一样的格式rn rn System.out.println(all); rn rn catch(IOException e)rn rn rnrnrn怎样才能让<em>父进程</em>的输出跟<em>子进程</em>的输出一样
一个关于父进程子进程的问题
我看到书这样写道:rnrn“在进程里,如果<em>父进程</em>死了,那么他创建的所有<em>子进程</em>也一起跟着死去“rnrn我现在用fork创建了一个<em>子进程</em>,在<em>子进程</em>里执行excel()函数(一个应用程序)rnrn我现在关闭<em>父进程</em>,但是<em>子进程</em>生成的应用程序还在<em>运行</em>。rnrn可以解释一下吗,我现在要在<em>父进程</em>中,关闭刚才的应用程序(<em>父进程</em>暂时不关闭),该<em>怎么</em>做?
操作系统-关于fork&父进程&子进程
前言 这学期在学操作系统,目前感觉还是挺有意思的。 操作系统老师:“鼓励你们大开脑洞多试试,会有各种奇异的结果,但是最后居然都能解释出来。” 本文是根据课上讲解+自行实践写的。 测试环境:Ubuntu 正文 关于fork()的3种返回值 这里提到的fork和下面程序中使用的fork()是一个C语言库函数,不是系统调用级别的fork();它根据不同的情况会返回3种类型的值。(而系统调用级别的f...
父进程等待子进程的异步版本
前言 首先,打开linux虚拟机或者系统的时候,系统自己建立一个init进程,这是Linux系统的基础进程,然后init进程再根据一些配置文件决定创建哪些进程,或者我们在终端自己创建一个新进程的时候,如果你有时间,你可以一直追查这个进程的祖祖辈辈,你会发现,他们都指向一个进程,那就是init进程。所以,可以这么说,Linux系统服务中,所有进程都是init的子孙进程。所以,进程的创建是通过创建子进
Linux子进程继承父进程的文件描述符
Linux<em>子进程</em>可以很方便地继承<em>父进程</em>的文件描述符
linux系统编程 父进程子进程fork
一,创建<em>子进程</em>fork函数 pid_t fork(void);创建成果返回打于0 ,失败返回 小于0二,exec函数 exec函数族一般规律 exec函数一旦调用成功即执行新的程序,不返回。只有失败才返回,错误值-1。所以通常我们直接在exec函数调用后直接调用perror()和exit(),无需if判断。 (list) 命令行参数列表 p (path)
Linux中,子进程父进程的继承关系
<em>子进程</em>从<em>父进程</em>继承了:用户号UIDs和用户组号GIDs进程组号当前工作目录根目录环境打开文件的描述符共享内存堆栈信号控制设定信号掩码控制终端文件方式创建屏蔽字执行时关闭(close-on-exec) 标志资源限制nice值 (由nice函数设定,数值越小,优先级越高)<em>子进程</em>与<em>父进程</em>不同的:进程号PID各自的<em>父进程</em>号自己的文件描述符和目录流的拷贝(译者注: 目录流由opendir函数创建,因其为顺序...
父进程waitpid子进程的一般实现
<em>父进程</em>waitpid<em>子进程</em>的一般流程
父进程等待子进程的异步版
1 #include   2 #include   3 #include   4 #include   5 #include   6 #include   7    8 void catchSig(int sig)   9 {  10     do{  11   12         pid_t ret = waitpid(-1,NULL,WNOHANG);  13    
关于父进程子进程交互问题
我用匿名管道实现<em>父进程</em>与<em>子进程</em>进行通信,有一个问题,就是如果<em>子进程</em>中有等待用户输入数据的操作,如(scanf,gets等)那么<em>子进程</em>就会一直等待用户输入,从而导致<em>子进程</em>无法继续向下执行造成阻塞。rn[size=14px][b][color=#FF0000]我想问的是有没有什么方法可以在<em>父进程</em>中检测到<em>子进程</em>是否正在要求用户输入数据呢?[/color][/b][/size]rn如果在<em>父进程</em>能够检测到的话,那么我就可以在<em>父进程</em>中判断,如果<em>子进程</em>正在要求用户输入数据,那么我就在<em>父进程</em>中调用scanf()等语句,通过管道写给<em>子进程</em>,这样,<em>子进程</em>就可以接收到从<em>父进程</em>所输入的数据了。
kill父进程能否杀死子进程
如题,首先我想问一下,求高手<em>解决</em>rn1. shell的kill指令和c语言的kill函数是不是同一个原理?rnrn2.kill函数并不是直接杀死进程,而是发送一个指令,目标pid接受后执行exit是吗????rnrn2. kill -9指令只是<em>结束</em>该进程吗? rnrn3. 若该进程有<em>父进程</em>,它会不会变为僵尸.它的<em>子进程</em>会不会变成孤儿?rnrn4.另外linux下的搜狗输入法很不稳定,崩溃的时候我kill该进程(fcitx) 为什么<em>结束</em>不掉呢rnrn5. 怎样判断进程是否进入内核态,若进入内核态,kill-9,能否被阻塞rnrn好了接下来我上测试过程,能否杀死<em>子进程</em>:rnrn首先 打开bash 输入<em>运行</em>bash,<em>运行</em>bash,<em>运行</em>dash,<em>运行</em>bash,<em>运行</em>bash 然后psrnPID TTY TIME CMDrn6550 pts/3 00:00:00 bashrn6606 pts/3 00:00:00 bashrn6662 pts/3 00:00:00 bashrn6718 pts/3 00:00:00 dashrn6719 pts/3 00:00:00 dashrn6720 pts/3 00:00:00 bashrn6776 pts/3 00:00:00 psrn然后kill -9 6719,继续psrnPID TTY TIME CMDrn6550 pts/3 00:00:00 bashrn6606 pts/3 00:00:00 bashrn6662 pts/3 00:00:00 bashrn6718 pts/3 00:00:00 dashrn6802 pts/3 00:00:00 psrn难道6719上的<em>子进程</em>被我杀掉了吗??????rn继续测试rn#include ;rnrn#include ;rnrnmain ()rnrnrnrnpid_t pid;rnrnprintf("fork! ");rnrnpid=fork();rnrnif (pid < 0)rnrnprintf("error in fork!");rnrnelse if (pid == 0)rn/rnrnprintf("i am the child process, my process id is %d \n",getpid());rnprintf("我没死啊");rnwhile(1)rnint a=1,b=2;rna
如何在父进程中控制子进程??
我有一个守护进程,一直在监听socket连接,客户进程向这个守护进程发命令,rn守护进程收到后fork一个<em>子进程</em>去执行相应的操作。具体程序如下: rnprintf("Server Starting\n"); rnswitch (fork()) rn rncase -1: /* Unable to fork */ rnfprintf(stderr, "unable to fork daemon\n"); exit(1); rncase 0: rnfclose(stdin); rnsignal(SIGCLD,SIG_IGN); rnfor(;;)rn rnsin_size = sizeof(struct sockaddr_in); rnnew_fd = accept(socketfd,(struct sockaddr *(&their_addr,&sin_size); rnif(new_fd == -1) rn rnexit(1); rn rnrnswitch(fork()) rn rncase -1: rnclose(new_fd); rnexit(1); rncase 0: rnserver_mgr(); rn_exit(0); rndefault:; rn rn rndefault:; rn rn可我发现一段时间后系统中出现了下面这样的情况: rnps -ef|grep netserver rnpasjk 31680 42560 95 18:12:20 pts/16 24:36 ./netserver rnpasjk 42560 1 0 16:46:56 pts/16 0:06 ./netserver rnpasjk 47396 42560 2 18:37:47 pts/16 0:00 ./netserver rn进程号为:31680的进程一直不退出,如果我把它kill掉的话,过一会又会产生一个同样的进程,rn可是我的<em>子进程</em>的操作已经早就完了,这样的进程在很多进程中只会产生一个,rn我想在<em>父进程</em>中监控<em>子进程</em>的执行时间,如果超时的话,就把它关掉,rn我该<em>怎么</em>做才能实现?? rn我的操作系统是AIX.rn
父进程结束的时候如何终止所有的子进程
<em>父进程</em>fock了多个<em>子进程</em>。但当<em>父进程</em>被Ctrl + C 强制<em>结束</em>的时候。<em>子进程</em>并没有被终止。rn请问各位高手。该如何在<em>父进程</em>被<em>结束</em>的时候,<em>结束</em>所有的<em>子进程</em>。
popen和system都会让父进程等待子进程结束
我希望的效果是,一个程序使用popen/system调用执行一个shell脚本,由于该shell脚本的执行需要很长时间才<em>结束</em>,我就不希望这个主程序一直等待脚本执行完才继续,而是异步执行该脚本同时继续下去。rn但我查资料发现popen/system这两个函数都要<em>父进程</em>等待<em>子进程</em><em>结束</em>时才会继续下去,那我该使用什么函数好?
在多进程中父进程frok子进程,怎样让子进程自举,脱离父进程,而且父进程不退出
在多进程中<em>父进程</em>frok<em>子进程</em>,怎样让<em>子进程</em>自举,脱离<em>父进程</em>呀,而且<em>父进程</em>不退出rnmain()rnrn pid_t child_pid;rn child_pid=fork();rn if(child_pid == 0)rn rn <em>子进程</em>自举,脱离<em>父进程</em>;//不好实现rn rn elsern rn 继续处理;rn rn
父进程退出后子进程的问题
<em>父进程</em>退出后<em>子进程</em>不能用Ctrl+C终止掉,rnrn如果<em>父进程</em>没有退出,只是sleep则可以用Ctrl+C终止,rnrn怀疑<em>子进程</em>没有继承<em>父进程</em>的终端,但ps后可以看到进程有对应的终端,rn怀疑<em>子进程</em>为后台<em>运行</em>,但fg并不能将它转换出来,rnrn有两种可能,rn1.<em>子进程</em>没有继承<em>父进程</em>信号处理, 新建的信号处理把SIGINT忽略了。rnrn2.<em>子进程</em>变成孤儿进程后,<em>父进程</em>变为init,是不是从init继承了信号处理?rnrn只是猜测,具体还不太清楚。
关于父进程控制子进程的问题
想了很久,还是打算来这发个帖请教。rn我的程序的<em>父进程</em>在一个列表中查询出很多录像,然后启动一个The Playa播放器的<em>子进程</em>来播放已知路径的录像,并在<em>父进程</em>把这个录像路径传递给<em>子进程</em>,<em>子进程</em>是一个int WINAPI WinMain入口的程序,我可以用WM_COPYDATA实现进程间通信吗?由于<em>子进程</em>也是一个单独的exe文件,但是有源代码,我能否控制<em>子进程</em>中的函数呢,这样就不用WM_COPYDATA来实现了,
子进程如何得到父进程的pid?
如题。
基于GPS的汽车导航系统的设计与实现.pdf下载
基于GPS的汽车导航系统的设计与实现.pdf http://xinlingzoulang.cn/ 相关下载链接:[url=//download.csdn.net/download/bnglish/2066794?utm_source=bbsseo]//download.csdn.net/download/bnglish/2066794?utm_source=bbsseo[/url]
mina-core-2.0.4.jar下载
mina-core-2.0.4.jar 相关下载链接:[url=//download.csdn.net/download/wscxyok/4876308?utm_source=bbsseo]//download.csdn.net/download/wscxyok/4876308?utm_source=bbsseo[/url]
自写的vm引擎文件下载
一个简单的message 自写的vm引擎 主要是讲原理 简单易懂 相关下载链接:[url=//download.csdn.net/download/qq_19756481/7869979?utm_source=bbsseo]//download.csdn.net/download/qq_19756481/7869979?utm_source=bbsseo[/url]
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件
我们是很有底线的