请问CreateProcessAsUser 为什么 产生的子进程可能会导致父进程崩溃? [问题点数:200分]

Bbs1
本版专家分:0
结帖率 88.24%
Bbs10
本版专家分:125460
Blank
红花 2018年11月 VC/MFC大版内专家分月排行榜第一
2018年10月 VC/MFC大版内专家分月排行榜第一
2018年9月 VC/MFC大版内专家分月排行榜第一
2018年8月 VC/MFC大版内专家分月排行榜第一
2018年5月 VC/MFC大版内专家分月排行榜第一
2018年4月 VC/MFC大版内专家分月排行榜第一
2018年3月 VC/MFC大版内专家分月排行榜第一
2018年2月 VC/MFC大版内专家分月排行榜第一
2018年1月 VC/MFC大版内专家分月排行榜第一
2017年12月 VC/MFC大版内专家分月排行榜第一
2017年11月 VC/MFC大版内专家分月排行榜第一
2017年7月 VC/MFC大版内专家分月排行榜第一
2012年7月 VC/MFC大版内专家分月排行榜第一
Blank
黄花 2018年7月 VC/MFC大版内专家分月排行榜第二
2018年6月 VC/MFC大版内专家分月排行榜第二
2017年9月 VC/MFC大版内专家分月排行榜第二
2017年8月 VC/MFC大版内专家分月排行榜第二
2017年4月 VC/MFC大版内专家分月排行榜第二
2017年3月 VC/MFC大版内专家分月排行榜第二
2017年2月 VC/MFC大版内专家分月排行榜第二
2016年8月 VC/MFC大版内专家分月排行榜第二
2016年7月 VC/MFC大版内专家分月排行榜第二
2016年6月 VC/MFC大版内专家分月排行榜第二
2015年6月 VC/MFC大版内专家分月排行榜第二
Blank
蓝花 2017年10月 VC/MFC大版内专家分月排行榜第三
2017年6月 VC/MFC大版内专家分月排行榜第三
2017年5月 VC/MFC大版内专家分月排行榜第三
2016年9月 VC/MFC大版内专家分月排行榜第三
2016年4月 VC/MFC大版内专家分月排行榜第三
2015年4月 VC/MFC大版内专家分月排行榜第三
2012年8月 VC/MFC大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs8
本版专家分:37406
Blank
蓝花 2016年1月 VC/MFC大版内专家分月排行榜第三
Bbs10
本版专家分:125460
Blank
红花 2018年11月 VC/MFC大版内专家分月排行榜第一
2018年10月 VC/MFC大版内专家分月排行榜第一
2018年9月 VC/MFC大版内专家分月排行榜第一
2018年8月 VC/MFC大版内专家分月排行榜第一
2018年5月 VC/MFC大版内专家分月排行榜第一
2018年4月 VC/MFC大版内专家分月排行榜第一
2018年3月 VC/MFC大版内专家分月排行榜第一
2018年2月 VC/MFC大版内专家分月排行榜第一
2018年1月 VC/MFC大版内专家分月排行榜第一
2017年12月 VC/MFC大版内专家分月排行榜第一
2017年11月 VC/MFC大版内专家分月排行榜第一
2017年7月 VC/MFC大版内专家分月排行榜第一
2012年7月 VC/MFC大版内专家分月排行榜第一
Blank
黄花 2018年7月 VC/MFC大版内专家分月排行榜第二
2018年6月 VC/MFC大版内专家分月排行榜第二
2017年9月 VC/MFC大版内专家分月排行榜第二
2017年8月 VC/MFC大版内专家分月排行榜第二
2017年4月 VC/MFC大版内专家分月排行榜第二
2017年3月 VC/MFC大版内专家分月排行榜第二
2017年2月 VC/MFC大版内专家分月排行榜第二
2016年8月 VC/MFC大版内专家分月排行榜第二
2016年7月 VC/MFC大版内专家分月排行榜第二
2016年6月 VC/MFC大版内专家分月排行榜第二
2015年6月 VC/MFC大版内专家分月排行榜第二
Blank
蓝花 2017年10月 VC/MFC大版内专家分月排行榜第三
2017年6月 VC/MFC大版内专家分月排行榜第三
2017年5月 VC/MFC大版内专家分月排行榜第三
2016年9月 VC/MFC大版内专家分月排行榜第三
2016年4月 VC/MFC大版内专家分月排行榜第三
2015年4月 VC/MFC大版内专家分月排行榜第三
2012年8月 VC/MFC大版内专家分月排行榜第三
Bbs12
本版专家分:359147
版主
Blank
名人 2013年 荣获名人称号
Blank
探花 2011年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第五
Blank
金牌 2012年1月 总版技术专家分月排行榜第一
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs12
本版专家分:359147
版主
Blank
名人 2013年 荣获名人称号
Blank
探花 2011年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第五
Blank
金牌 2012年1月 总版技术专家分月排行榜第一
其他相关推荐
关于父进程子进程的关系(UAC 绕过思路)
表面上看,在windows中。如果是a进程创建了b进程,那么a进程就是b进程的父进程,反之,如果是b创建了a,那么b进程就是a的父进程,这是在windows出现以来一直是程序猿们都证实的,但是在在win Vista后面有了一个新安全消息机制,UAC(user account control),这里科普下UAC的功能,其实UAC就是大家常见的安装软件或者启动程序的时候的出现的全屏变暗的一个提示框,这
僵尸进程产生和处理
1 什么是僵尸进程: 当子进程父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。2 怎样来清除僵尸进程: 1.改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程父进程收到此信号后,执行waitp
子进程继承父进程中的锁
fork函数调用会创建子进程子进程的地址空间是在调用fork时父进程地址空间的拷贝。因为子进程地址空间跟父进程一样,所以调用fork时,子进程继承了父进程中的所有互斥锁、读写锁和条件变量(包括它们的状态)。     但在多线程环境中,调用fork时,子进程中只有一个线程存在,这个线程是调用fork函数的那个线程,其他线程都没有被拷贝。     根据上述两点,子进程中的锁可能被不存在的
父进程子进程、进程和线程
子进程继承的来自父进程的属性: ● ● ● ● ● ● ● ●已打开的文件描述符 ●实际用户ID、实际组ID、有效用户ID、有效组ID ●附属组ID ●进程组ID ●会话ID
为什么fork创建子进程后,父进程中运行过的代码在子进程中不再运行了
子进程父进程的一个完全拷贝,如何理解?为什么fork创建子进程后,父进程中运行过的代码在子进程中不再运行了?
监听socket被子进程继承导致的通信问题
如果socket仅仅是针对connection,例如是accept出来的,那问题不大 例如ftp,父进程关闭此socket,子进程完全接管这个socket负责与客户端进行通信。本文主要讨论监听socket被子进程继承导致的通信问题如果socket属于UNIX Domain Socket族类型,例如: int fd, size; struct sockaddr_un un
fork()子进程过程分析
在讲fork()子进程之前,我们需要重申几个概念,以便更好理解fork()子进程。          我们都知道程序在计算机上执行的时候是以进程为单位执行的,进程是可执行程序运行的基本单位。进程执行过程中就需要OS为其分配可供执行的资源。其中最难理解的就是内存资源的分配,OS到底是怎么样为新创建的进程合理地分配内存资源的?这就产生了虚拟地址空间的概念 1、虚拟地址空间         对
fork调用后,子进程父进程是否共享变量
回顾fork调用 fork系统调用从已存在的进程中生成一个新的进程,这个新的进程就是子进程,我们可以通过fork系统调用的返回值来区分子进程还是父进程。 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。 我们的问题是,进程中的变量是否由父进程子进程共享? 背景 最开始我简单的认为,似乎是看视频里说的。对于只读变量,父
WIN通过子进程获取父进程ID
// ParentPid.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include // 对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个2个MFC的使用选项 ULONG_PTR GetParentProc
父进程异常退出时, 杀死所以子进程
#include #include #include #include #include #include void my_system(const char*cmd) { pid_t pid; pid = fork(); if (pid == 0) { prctl(PR_SET_PDEATHSIG, SIGHUP);
父进程子进程
关于父进程子进程有许多疑问,这篇仅仅是个开头,这个系列仅为自己思考,并不是成熟体系,希望大家多批评指正。 在网上搜了很多,但是都没有一个普适的解释,仅仅是what和how,而我想知道的是why,所以我自己决定总结一下。 要了解父进程子进程的关系,首先知道进程是什么?为什么出现进程?为什么引入子进程的概念?怎样创建子进程?当父进程结束时,子进程怎么办? 一、进程是什么? 在回答之前,先表
linux中fork函数及子进程父进程的关系 (总结的很好)
一、fork入门知识      一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。     一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来
linux中fork函数及子进程父进程进程先后
一、fork入门知识      一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。     一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来
linux子进程知道父进程退出的解决方案
在实际开发中难免会处理进程间的关系,最常见的是父子进程的相互监督。父进程等待子进程,或者自进程知道父进程运行是否结束,以方便释放资源。本文章提供了如何实现父进程监听子进程结束的方案,以及子进程如何知道父进程退出的方案。
启用守护进程使子进程父进程完全分离
daemon模块, daemon是存放在raw目录下的elf文件,它是一个守护进程,保护应用不被杀死。daemon原理是fork出子进程之后,让子进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离,紧接着就是在子进程中定时去启动java层配置的任务。这里它保证PushCoreService和ChapingCoreService一直在后台运行
僵尸进程是如何产生的?怎样避免僵尸进程的产生
僵尸进程的产生: 当一个进程创建了一个子进程时,他们的运行时异步的。即父进程无法预知子进程会在什么时候结束,那么如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,会不会丢失子进程的结束时的状态信息呢?处于这种考虑unix提供了一种机制可以保证只要父进程想知道子进程结束时的信息,它就可以得到。 这种机制是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但
进程管理:通过父进程ID获取子进程ID
为了提高效率,充分利用资源,需要采用多线程,多进程的设计。在网络通信程序中,无论是客户端,还是服务端,功能稍微扩展一下,基本上不可避免的要使用多线程,多进程。遇到一个需求,需要检测父进程A(Process A) ,创建的子进程B (Process B)。 其中 Process A是主程序Process Main创建的,在创建的时候可以获取Process A 的ID,因此把Process
子进程共享的资源
先来看一个题目: 当父进程调用fork()创建子进程之后,下列哪些变量在子进程中修改之后,父进程里也会相应地作出改动? A.全局变量 B.局部变量 C.静态变量 D.文件指针 答案为D,解释如下: fork()子进程父进程共享的资源: 打开的文件 实际用户ID、实际组ID、有效用户ID、有效组ID 添加组ID 进程组ID 对话期ID 控制终端。  设置-用户-ID标志
一个循环里fork出的子进程个数
[lizhe@localhost fork]$ ./exe pid:4071 ------ 问以下代码的执行结果 #include #include #include int main(){ int pid=0; for(int i=0;i,pid); pr
【Linux】为什么子进程能继承父进程的环境变量?
为什么子进程能继承父进程的环境变量? 首先考虑进程的虚拟地址空间 命令行参数和环境变量在栈之上 2.子进程父进程为模板,拷贝PCB、虚拟地址空间 3.所以会被继承下去 ...
子进程父进程时间片的问题
在书上看到一段这样的话: 在kernel 2.6中时间片的计算是分散的,具体的计算时间可以用task_timeslice(),也可以用其他方法。 a.进程创建时,将父进程的时间片分一半给子进程,同时父进程的时间片减半。 b.进程用完时间片以后,需要重新计算时间片,并将进程插入到相应的运行队列。 c.进程退出时,根据first_timeslice的值来决定是否将子进程的时间片返还给父进程
子进程父进程的pid一定不同吗?
p { margin-bottom: 0.21cm; }                                                               子进程父进程的pid 一定不同吗? 一般来说,子父进程的pid 是不同的。 除了系统的原始的0 号进程,创建一个进程可以调用fork() 、vfork() 、clone() 函数。在/kernel/fork.c 的fork()
fork出的子进程父进程 避免僵死进程
一、fork后的父子进程 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是因为它随时可以调用
Console 子进程 父进程
Console 子进程 父进程Console 子进程 父进程Console 子进程 父进程Console 子进程 父进程
LinuxC/C++编程(3)—异步清理子进程(避免成为僵尸进程)
先了解Linux中进程的一些机制: 孤儿进程和僵尸进程: 1 如果父进程先退出,子进程尚未退出,那么子进程会成为孤儿,这时候会被init进程领养,等到子进程生命周期结束后,init会作为父进程释放掉子进程所占用的资源,所以孤儿进程并没有危害; 2 如果子进程先退出,父进程尚未退出,父进程必须调用wait()函数释放掉子进程所占用的资源,如果没有这样做,子进程的资源将不会自动释放,成为僵尸
父进程为什么要创建子进程
在程序设计时,某一个具体的功能模块可以通过函数或是线程等不同的形式来实现。对于同一进程而言,这些函数、线程都是存在于同一个地址空间下的,而且在执行时,大多只对与其相关的一些数据进行处理。如果算法存在某种错误,将有可能破坏与其同处一个地址空间的其他一些重要内容,这将造成比较严重的后果。为保护地址空间中的内容可以考虑将那些需要对地址空间中的数据进行访问的操作部分放到另外一个进程的地址空间中运行,并且只
操作系统-关于fork&父进程&子进程
前言 这学期在学操作系统,目前感觉还是挺有意思的。 操作系统老师:“鼓励你们大开脑洞多试试,会有各种奇异的结果,但是最后居然都能解释出来。” 本文是根据课上讲解+自行实践写的。 测试环境:Ubuntu 正文 关于fork()的3种返回值 这里提到的fork和下面程序中使用的fork()是一个C语言库函数,不是系统调用级别的fork();它根据不同的情况会返回3种类型的值。(而系统调用级别的f...
子进程中getppid()返回值与父进程的不一致
老师要求使用fork创建一个子进程,并且在子进程中显示父进程的进程号和子进程的进程号,然后显示出当前目录下的内容,在父进程中显示出父进程的进程号和子进程的进程号。代码很简单,直接调用fork函数,然后根据其返回值判断在子进程还是父进程中即可。关于fork的知识点,可以参考linux中fork()函数详解(原创!!实例讲解)很快写出了程序,但是执行之后却发现了一个问题:程序代码:运行之后:按道理说应该
进程笔记1:子进程父进程
先这几天搞多进程以及多线程通信,怎奈以前没有深接触,所以这里总结一下。 #include #include #include int glob = 6; char buf[] = "a write to stdout/n"; int main() { int var; pid_t pid; var = 88; fp
关于子进程继承父进程属性的小问题总结
今天看书,看到用fork创建子进程的一段样例代码: [cpp] view plaincopy #include    #include    #include       int main(void)   {       pid_t pid;       char* msg;       int k;          pri
父进程异常退出时,确保子进程退出
前言父进程异常退出时,如果子进程未退出,或者对于父进程的退出不知情,将会导致子进程变成孤儿进程,更严重的情况是,如果父进程需要使用端口,而父进程异常退出,父进程再次启动时,会发现其子进程占用其端口。原因是,子进程继承了原来父进程的端口。因此必须保证,父进程异常退出是,子进程也能够退出。如下面的程序,对系统的system函数进行了改写。 bakRun.sh#!/bin/bash declare -i
子进程对静态变量的操作不会相互影响
一.一个进程被操作系统调入到内存中运行,其对应的进程在内存中分为代码区,数据区,堆区和栈区 1.数据区:存放全局,静态和常量 2.栈区:主要用于存放局部变量,传递参数,存放函数的返回地址 3.堆区:用户存放动态分配的对象,当你使用malloc饥饿new等进行分配的时候,所得到的空间就在堆区中 二.fork之后,子进程会拷贝父进程的数据空间,堆和栈空间,所以子进程中修改变量(全局变量
子进程及时知道父进程已经退出的最简单方案
 [精彩] 子进程及时知道父进程已经退出的最简单方案?http://www.chinaunix.net 作者:yuonunix  发表于:2003-10-31 10:14:14【发表评论】 【查看原文】 【C/C++讨论区】【关闭】要父进程知道子进程退出,这太容易了,但是要子进程知道父进程退出,可有点麻烦。      父进程如果退出,子进程如何知道呢,最笨的方法,父子进程之间建立socket连接,然后建立心跳,没隔1秒测试一把,当然太笨了,通过管道
软件缺陷产生的原因
软件缺陷产生的原因  在软件开发的过程中,软件缺陷的产生是不可避免的。那么造成软件缺陷的主要原因有哪些?从软件本身、团队工作和技术问题等角度分析,就可以了解造成软件缺陷的主要因素。   软件缺陷的产生主要是由软件产品的特点和开发过程决定的。软件本身  ①需求不清晰,导致设计目标偏离客户的需求,从而引起功能或产品特征上的缺陷。   ②系统结构非常复杂,而又无法设计成一个很好的层次结构或组件结构,结果...
问题:子进程父进程哪个先执行:【转】关于 fork 和父子进程的理解 + 【转】
关于 fork 和父子进程的理解    代码: #include   #include   main ()  {          pid_t pid;          pid=fork();          if (pid                 printf("error in fork!");          else if
linux 父进程中不阻塞不轮询回收子进程的两种方
在linux 中,子进程的正常退出后,还有一些资源没有被释放掉,一般的方式是父进程负责来回收子进程的资源,采用wait()和waitpid()函数,前者只能只能阻塞的方式等待子进程从其它状态变为僵尸态,后者可以以阻塞的方式或者轮询的方式来等待子进程的状态改变,不管是阻塞方式还是轮询方式,父进程必然要消耗一些时间开销来做这件事情,其实可以通过信号的用不阻塞不轮询的方式回收成为僵尸态的子进程,对于SI
为什么父进程不处理标准输入输出子进程会挂起(Java)?
最近写Java的多进程程序时遇到一个奇怪的问题,发现程序运行一段时间以后会自动挂起。按道理来说子进程父进程之间是没有太大的关系的,父进程只是用于开启一个新的子进程,之后就没怎么联系了。最后查到了stackoverflow上面的一片帖子,写的不错。http://stackoverflow.com/questions/16983372/why-does-process-hang-if-the-pare
父进程退出,保证子进程交由init。
最近写代码遇到fujinch
父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID。
#include #include #include //父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID。 int main() { int num = 5; int i; pid_t pid,ret; for(i=0;i
fork子进程时和父进程之间的文件描述符的问题
在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点来说下,文件描述符是如何工作的。 文件描述符相当于一个逻辑句柄,而open,close等函数则是
20170724_父进程子进程到底是如何执行的?
父进程子进程到底是如何执行的?
C例子:父进程子进程
该程序是我写的博客“一起talk C栗子吧(第七十九回:C语言实例--父进程子进程)”的配套程序,共享给大家使用
子进程中调用exit()函数对标准I/O流的影响
我们知道exit()函数是用来终止程序用的,它将调用exit系统调用,将程序状态作为参数返回给内核。但是之于_exit()和_Exit(),exit()的不同之处在于,exit()在调用exit系统调用之前,它将做一些最后的处理,包括两个部分:调用由atexit()注册的终止处理程序;关闭打开的流。这里我们要讨论的是第二点。 fork() 我们都知道,由fork()创建的子进程父进程的副
kill掉父进程子进程不同的运行方式
第一种情况: [root@qht2 ~]# ps -ef | grep httpd root 3799 1 0 10:41 pts/0 00:00:00 /usr/sbin/nss_pcache off /etc/httpd/alias root 3803 1 3 10:41 ? 00:00:00 /usr/sbin/httpd apache 3807 3803 0 10:41 ? 0
socket编程中父子进程、兄弟进程的端口问题
最近在linux下弄一些socket方面的东西,涉及到父子进程、兄弟进程间的端口、socket句柄的问题,主要问题集中在两个方面: 1、假如父进程监听A端口,那么在client端来连接,并fork子进程,那么子进程通过那个端口与client交换数据呢? 通过实验显示,还是端口A。为什么?端口复用技术!那么,实验是怎么做的呢?其实很简单,server端启动,在fork出子进程时保证每个子
fork出的子进程父进程
一、fork后的父子进程 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是因为它随时可以调用
Linux父进程对于子进程的异步等待
父进程为什么等待子进程     Linux中,存在多进程、多线程的服务。  进程是如何产生、如何消失的?  首先,打开Linux虚拟机或者系统的时候,系统自己建立一个init进程,这是Linux系统的基础进程,然后init进程再根据一些配置文件决定创建哪些进程,或者我们在终端自己创建一个新进程的时候,如果你有时间,你可以一直追查这个进程的祖祖辈辈,你会发现,他们都指向一个进程,那就是init进程。
父进程wait回收子进程
《朱老师物联网大讲堂》学习笔记     学习地址:www.zhulaoshi.org wait工作原理, 子进程结束后,系统向其父进程发送SIGCHILD信号, 父进程调用wait函数后阻塞, 父进程被sigchild信号唤醒然后去回收僵尸子进程, 若父进程没有子进程则wait函数返回错误,        #include        #include
android捕获子进程的异常操作
在App开发中,经常会遇到单独启动一个进程,用于在后台的任务操作,由于是单独的一个进程,所以主进程和子进程之间互不影响,这样有利有弊!利处肯定很多,比如存活周期不受影响,后台默默处理等等,但也有弊端! 一个明显的弊端就是:app的异常捕获问题! 由于是单独的进程,所以通常操作,在Application中进行捕获异常只能对于主进程的异常有影响,但是子进程的异常就无法捕获了,所以必须特别为子进程进行
父进程如何让子进程干净明白的安全退出???
最近遇到一个问题,原本希望父进程实时让vfork产生的子进程安全退出父进程后,父进程还可正常创建子进程。但是遇到了第一次kill以后,安全退出;第二次重新vfork创建子进程,InterruptPrint线程函数接收到结束指令后程序就挂了 以下InterruptPrint是在vfork中创建的线程函数(可能在父进程创建更好?为什么),InterruptPrint是实时接收来自串口通信的指令确定让...
关于 fork 和父子进程的理解
关于 fork 和父子进程的理解   (http://blog.163.com/kingore@126/blog/static/8540871920097300284862/) 代码: #include   #include   main ()  {          pid_t pid;          pid=fork();         
linux系统编程 父进程子进程fork
一,创建子进程fork函数 pid_t fork(void);创建成果返回打于0 ,失败返回 小于0二,exec函数 exec函数族一般规律 exec函数一旦调用成功即执行新的程序,不返回。只有失败才返回,错误值-1。所以通常我们直接在exec函数调用后直接调用perror()和exit(),无需if判断。 (list) 命令行参数列表 p (path)
并发服务器中的fork函数、 子进程父进程的区别
#include int fork(void) 返回:在子进程当中为0,在父进程当中表示为子进程ID,若出错则返回-1 fork函数的特性: 1.fork之前打开的所有的描述符(文件描述符、设备描述符、sockfd、管道中的描述符等等)在fork之后由子进程共享的。 2.出了继承打开后的描述符之外,还有其他属性, 例如: 实际用户ID、实际组ID、有效用户ID、有效组ID 附属组
Linux 下父进程子进程的通信(pipe管道)
转自http://siqun.blog.163.com/blog/static/213496001201341231121720/ 每个进程各自有不同的用户地址空间,任 何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,I
子进程终止顺序与僵死进程
在Linux_父子进程与fork一文中,我们知道子进程是在父进程调用fork之后生成的。那么关于父子进程终止先后顺序又会有什么影响呢? 1、父进程子进程之前终止 对于父进程已经终止的所有进程,它们的父进程都改变为init进程。我们称这些进程由init进程收养。其操作过程大致是:在一个进程终止时,内核逐个检查所有活动的进程,以判断它是否是是要终止进程的子进程,如果是,则该进程父进程ID就更改为
父进程子进程的变量关系
子进程产生时会拷贝父进程的值,
python学习之fork 父进程子进程的理解
我觉得关于子进程父进程还是比较难理解的,所以分成两部分来分析 一、先来理解子进程父进程的工作原理 在Python中,使用os.fork()之后,在内存中把父进程的代码及内存分配情况拷贝一份生成子进程的运行空间,这样子进程的所有代码都与父进程一样,两个进程之间的运行是独立的,互不影响。在父进程中获取到的pid是子进程的pid号,在子进程中获取的pid是0,所以下程序运行出的结果可以看出,子进...
Java程序设计概念:对象先行(原书第8版)
计算机科学丛书
shell脚本杀死进程及所有子进程
在一个C++项目中,程序启动时通过systemdia
父进程结束后,子进程自动结束
5三/1227 Linux下让父进程结束后,子进程自动结束 在多进程编程的时候,经常会遇到这样的情况。父进程创建了一堆子进程,当遇到错误或者操作失误的时候把父进程关闭了,但是子进程还在跑,不得不一个一个地杀死子进程,或者使用ps,grep,awk,kill来配合批量杀死。 之前在写 xxfpm(一个PHP-CGI的进程管理) 的时候,在Linux下使用父进程子进程
父进程子进程间相互发送信号
父进程子进程间通信(软中断)
子进程继承父进程中互斥锁的讨论
引言 首先明确一个问题:如果一个多线程程序的某个线程调用了fork函数,那么新创建的子进程里是不会自动创建和父进程相同数量的线程的,它只是调用fork的那个线程的完整复制。并且,子进程会自动继承父进程中(包括父进程在调用fork之前创建的线程)互斥锁的状态。也就是说,父进程中已经被加锁的互斥锁在子进程中也是被锁住的。这就引起了一个问题:子进程可能不清楚从父进程继承过来的互斥锁的具体状态(是
vfork创建的子进程父进程地址空间关系
在《UNIX环境高级编程》一书的第八章中,有一道课后习题如下:回忆图7-3典型的存储空间布局。由于对应于每个函数调用的栈帧通常存储在栈中,并在调用 vfork后,子进程运行在父进程的地址空间中,如果不是在main函数中而是在另一个函数中调用vfork,以后子进程从该函数返回时,将会发生什么情况?作者Rich Stevens是一位大师,留下这么一题必有其深意,于是结合《深入理解计算机系统》中
python中父子进程
最近在使用python中的multiprocessing模块时遇到一些问题,很多人应该遇到相同问题,简单研究下,供有需要的参考。 首先,要明白multiprocessing的出现很大程度是为了解决python GIL锁带来的多线程低效问题,其次,注意Windows上和Linux上的进程、线程行为不一致。 那么我们常遇到的问题如下: 1.父进程开新的子进程完成任务,父进程关闭时,必须关闭子进程...
关于进程和子进程和线程会不会成为僵尸进程的问题
进程在结束的时候,不管是异常退出
进程学习——父进程子进程ID
今天在测试共享内存时编写了一个进程测试的代码,在调用fork函数创建子进程时,在父进程中返回子进程pid,在子进程中返回0;具体代码如下: #include #include int main() { pid_t pid; pid = fork(); //父进程 if(pid != 0) { printf(
java中父进程子进程
转自:https://my.oschina.net/hosee/blog/509557 以前在学习操作系统的时候,一直记得的父线程死后,子线程也消失了。然而今天在查资料中,发现有点疑惑,在此记录一下。 Java编写的程序都运行在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。 每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,
主进程和子进程执行顺序问题
import multiprocessing import time import os # 工作任务 def work(): current_process = multiprocessing.current_process() print("work:", current_process) print("work进程编号:", current_process.pid...
unix/linux创建新进程,父子进程详解,附有案例
fork() 用来创建进程fork(void) 在linux中所有进程都是由init进程直接或间接创建 成功:在父进程中将返回子进程的PID;子进程返回0,以区别父进程 失败:父进程中返回-1 1 #include 2 #include 3 #include 4 5 int main(int argc,char *argv[]) 6 {
验证子进程退出时会给父进程发送信号的机制
一、简单版本代码块 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 void catchSig(int sig) 8 { 9 printf("get
Linux 进程--父进程查询子进程的退出状态
转载至文章: linux系统编程之进程(六):父进程查询子进程的退出,wait,waitpid本节目标: 僵尸进程 SIGCHLD wait waitpid 僵尸进程当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止。子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进
fork之后,子进程父进程那继承了什么
知道子进程父进程继承什么或未继承什么将有助于我们。下面这个名单会因为 不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是 这些东西的 *拷贝*,不是它们本身。 由子进程父进程继承到: 进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs)) 环境(environment) 堆栈
printf输出string类型出现的问题
#include using namespace std;int main(void){ string a; a = "123"; char *b="123"; cout<<<<,a.c_str());//正确
为什么父进程id是1
转 : http://www.cnblogs.com/bastard/p/2664896.html 借用一段代码: /* * fork_test.c * version 1 * Created on: 2010-5-29 * Author: wangth */ #include &lt;unistd.h&gt; #include &lt;stdio.h&gt; i...
fork函数的两次返回和父子进程的执行顺序简介
http://hi.baidu.com/%CE%A8%C0%D6ice/blog/item/c78270ff877db72d5c600889.html   今天为了参加腾讯的面试,特地研究了一下fork的两次返回。 大家都知道,调用fork后会返回两个值或者一个值。两个值是指在调用成功的情况下,返回0表示子进程在运行,大于0的数表示父进程在运行,错误情况下就返回一个值
ubuntu 14.04.1 LTS父进程终止,子进程没有被init(1)进程领养
fork一个子进程,在子进程中打印父进程终止前后的PPID:按照正常的理解,首先会打印父进程的PID,然后会打印init(PID=1)。因为子进程转为孤儿进程被init进程收养。#include #include #include #include #include #include int main (void) { pid_t pid; fflu
子进程父进程是否共用同一个全局变量
/************************************************************************* > File Name: test_g_var.c > Author: mhsheng > Mail:981065720@qq.com > Created Time: Wed 09 Nov 2016 11:36:09 AM CST ***
fork之后父子进程的内存关系
1.fock()调用的基本语义#include pid_t fork(void); //父进程返回子进程的pid,子进程返回0,错误返回-1fork()创建了一个心的进程(child)信进程几乎是调用进程(父进程的翻版),理解fork()的关键是,在完成对其调用之后,会产生2个进程,且每个进程都会从fork()的返回处开始执行.这俩个进程将执行相同的程序段,但是拥有各自不同的堆段
父进程waitpid子进程的一般实现
父进程waitpid子进程的一般流程
子进程退出时会给父进程发信号吗?
父进程创建一个子进程,那么子进程退出时,会不会告诉父进程它要退出了?其实在子进程退出时,会给父进程发送一个SIGCHLD,17号信号。 那么下面用代码来验证一下: 首先要捕捉SIGCHLD信号,输出 i am %d signal ; 再创建子进程,在子进程中输出 i am child,然后退出; 在父进程中每隔1s输出 i am father。#include #in
过拟合产生的原因和预防
1,什么是过拟合(overfitting) 简单的说就是这样一种学习现象:Ein 很小,Eout 却很大。 而Ein 和 Eout 都很大的情况叫做 underfitting。 这是机器学习中两种常见的问题。 上图中,竖直的虚线左侧是"underfitting", 左侧是"overfitting”。 发生overfitt
父进程创建多个子进程的问题
父进程创建子进程,看起来容易,返回值x
Linux子进程继承父进程的文件描述符
Linux子进程可以很方便地继承父进程的文件描述符
linux C : 子进程监听父进程使用的socket端口问题
前言 在cm中,有个服务程序,收到socket命令后,启动一个子进程。 即使子进程没有任何socket操作,用lsof -i :port 来查看,也会看到子进程在监听父进程开的socket端口。 如果父进程由于某种原因退出了(假设是崩溃,调试或收到了web系统的命令退出),再重启父进程,端口被子进程监听,导致bind失败。 因为没想到问题原因,看代码也看不出来,就搁了一段时间。...
fork后子进程父进程资源的继承
使用fork创建一个新进程后,子进程继承了
linux的父进程子进程发kill信号例子以及对子进程的状态进行判断
先看一个父进程子进程发kill信号例子: #include #include #include #include #include int main(int argc, const char *argv[]) { pid_t pid; int status; pid = fork(); if (0 == pid) { pri
子进程不会完全复制父进程的地址空间,它会在父进程的地址空间中运行
vfork创建的子进程父进程地址空间关系 存储unix编程 在《UNIX环境高级编程》一书的第八章中,有一道课后习题如下: 回忆图7-3典型的存储空间布局。由于对应于每个函数调用的栈帧通常存储在栈中,并在调用 vfork后,子进程运行在父进程的地址空间中,如果不是在main函数中而是在另一个函数中调用vfork,以后子进程从该函数返回时,将会发生什么情况? 作者Rich
时间片轮转调度算法的提及和关于fork函数执行父,子进程先后顺序的理解
时间片轮转调度算法的提及和关于fork函数执行父,子进程先后顺序的理解     fork函数是用来创建进程的,命令行下输入man2 fork 看到他的函数声明: #include  pid_t fork(void);     fork函数调用一次会返回两次值,在成功调用fork函数后,当前进程会分裂为两个进程,一个是当前进程,返回值是子进程的ID;另一个是当前创建的子进
多进程中使用chdir()遇到的问题
int chdir( const char *s ){ return( lfn_mrc_dir( getshortfilename( s ), 0x3B00 ) ); }    今天在做shell命令解释器的时候,在解释内部命令cd的时候,遇到一个问题,在子进程中调用chdir()改变当前目录,发现无法改变当前进程。 调用过程如下: pid_t pid;if( pid=fork
进程的一些概念-父亲进程、子进程、僵尸进程、孤儿进程
进程有这么多的种类,那么进程之间定是有相关性的,而这些有关联性的进程又是如何产生的,如何衍生的? 就比如我们启动了终端,就是启动了一个 bash 进程,我们可以在 bash 中再输入 bash 则会再启动一个 bash 的进程,此时第二个 bash 进程就是由第一个 bash 进程创建出来的,他们直接又是个什么关系? 我们一般称呼第一个 bash 进程是第二 bash 进程的父进程,第
Linux 利用管道父子进程间传递数据
父进程通过管道向子进程传递字符串,然后子进程向屏幕打印出所收到的字符串。
进程fork()两次---解决一个进程不必等待子进程终止,也不希望子进程处于僵死状态(一般是服务器进程fork())
首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件。两次fork()就是为了解决这些相关的问题而出现的一种编程方法。  孤儿进程         孤儿进程是指父进程子进程结束之前死亡(return 或exit)。如下图1所示: 图1  孤儿进程 但是孤儿进程并不会像上面画的那样持续很长时间,当系统发现孤儿进程时,init进程就收养孤儿进
我们是很有底线的