• 关于

    进程

    的搜索结果

问题

子进程分父进程时间片的问题

a123456678 2019-12-01 20:04:43 905 浏览量 回答数 2

回答

我一般用php daemon来做,一个进程作为父进程一直跑着(可能是个while + sleep),父进程判断时间到了,就fork一个/多个子进程来处理业务,这时父进程监听子进程退出信号,子进程业务执行完了就退出了,这时父进程会检测到,直到所有子进程退出。一个原则就是父进程尽可能简单,不要处理业务逻辑,从而保证父进程的稳定性。子进程去处理业务,即使出现FataErr也不会导致所有进程退出。还有个小提示:信号是可以被覆盖的,也就是说两个子进程退出时,父进程可能只收到一个信号,这时父进程应该用while循环来处理子进程退出事件

a123456678 2019-12-02 02:53:40 0 浏览量 回答数 0

回答

启动一个写文件的进程,其它进程向他发消息。。######多个进程写一个文件推荐代理模式,由代理进程负责数据的写入,其他进程只负责将数据发给代理进程######谢谢两位大哥的指导,明白要怎么做了。 ######上面两位的思路很正确。把写文件的功能独立出来,由专门的进程处理。还可以设定一个专门的队列进程,这个进程根据一定规则维护一个队列,其它进程只要把数据交给这个进程就可以了。队列文件进程自己判断应该把数据放到队列哪个位置。写进程只需要去队列头取数据就是。 启动一个写文件的进程,其它进程向他发消息。。######多个进程写一个文件推荐代理模式,由代理进程负责数据的写入,其他进程只负责将数据发给代理进程######谢谢两位大哥的指导,明白要怎么做了。 ######上面两位的思路很正确。把写文件的功能独立出来,由专门的进程处理。还可以设定一个专门的队列进程,这个进程根据一定规则维护一个队列,其它进程只要把数据交给这个进程就可以了。队列文件进程自己判断应该把数据放到队列哪个位置。写进程只需要去队列头取数据就是。

kun坤 2020-06-09 11:45:52 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

父进程捕获到子进程挂掉的信号以后又创建了一个子进程,但是子进程不执行后边的算法?

a123456678 2019-12-01 19:56:48 1231 浏览量 回答数 2

回答

因你的目的描述不是很清楚,我只能猜测,你的意图是: system(tor)调用可能会一直阻塞或长时间阻塞,如果它在规定时间内还没执行完,就kill之?在得到你确认之前,我先不回答这个问题。看了你的代码,先说两个严重问题。第一,父子进程有各自的数据内存空间。linux使用了copy on write技术,fork后子进程会与父进程共享数据,但一旦子进程修改数据,就会copy一份出来。就如代码中的result,子进程一份,父进程一份,各不相干。你代码的写法,把多进程当多线程来写了!第二,kill主进程pid即向主进程发信号,通常主进程在多进程里是进程组组长,组长及组内所有的子进程都会收到信号,包括system函数执行的程序也是属于子进程,除非被system执行的进程自己改变了进程组id。这个SIGKILL一发出,相当于所有进程包括子进程都会被强行杀掉,这种情况下程序内部根本无法进行什么逻辑判断和处理,整个程序就属于异常退出状态?

a123456678 2019-12-02 02:56:39 0 浏览量 回答数 0

回答

进程是操作系统中最基本、重要的概念,是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。狭义上讲,进程是正在运行的程序的实例;广义上讲,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统进行资源分配和调度、动态执行的基本单元,是操作系统结构的基础,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。其概念主要有两点:(1)进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。(2)进程是一个“执行中的程序”。只有在操作系统、处理器执行程序时,它才能成为一个活动的实体,我们称其为进程。从理论角度看,进程是对正在运行的程序过程的抽象;从实现角度看,它是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。 一、进程具有以下特点: (1)动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生、动态消亡的。 (2)并发性:任何进程都可以与其他进程一起并发执行。 (3)独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。 (4)异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。 (5)结构特征:进程由程序、数据和进程控制块三部分组成。 二、进程、线程和程序的联系: 通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。此外多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进程。 三、进程和程序的区别: (1)程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念,而进程是程序在处理机上的一次执行过程,它是一个动态的概念。 (2)程序可以作为一种软件资料长期存在,而进程是有一定生命期的。 (3)程序是永久的,进程是暂时的。 (4)进程更能真实地描述并发,而程序不能。 (5)进程是由进程控制块、程序段、数据段三部分组成。 (6)进程具有创建其他进程的功能而程序没有。 (7)在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。 四、进程具有的三种基本状态 由于进程在执行过程中具有动态性和异步性,因此也就决定了进程可能具有多种状态。 (1)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。 (2)运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 (3)阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器资源分配给该进程,也无法运行。 五、创建进程的事件 在多道程序环境中,只有作为进程时才能在系统中运行。因此,为了让程序能运行,就必须为它创建进程。一个进程去创建另一个进程的典型事件,可以有以下四类: (1) 用户登录:在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入到就绪队列中。 (2)作业调度:在批处理系统中,当作业调度程序按照一定的算法调度到某作业时,便将该作业装入到内存,为它分配必要的资源,并立即为它创建进程,再插入到就绪队列中。 (3) 提供服务:当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务,例如,用户程序要求进行文件打印,操作系统将为它创建一个打印进程,这样,不仅可以使打印进程与该用户进程并发执行,而且还便于计算出为完成打印任务所花费的时间。 (4) 应用请求:在上述三种情况中,都是由系统内核为它创建一个新进程,而这一类事件则是基于应用进程的需求,由它创建一个新的进程,以便使新进程以并发的运行方式完成特定任务。 六、进程的创建过程 一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语create()按下述步骤创建一个新进程。 (1) 申请空白PCB。为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。 (2) 为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需要的内存大小。 (3) 初始化进程控制块。PCB的初始化主要包括:初始化标识信息,将系统分配的标识符和父进程标识符,填入新的PCB中;初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式的方式提出高优先级要求。 (4) 将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入到就绪队列中。 七、引起进程终止的事件 (1)正常结束:在任何计算机系统中,都应该有一个表示进程已经运行完成的指示。例如,在批处理系统中,通常在程序的最后安排一条Hold指令或终止的系统调用。当程序运行到Hold指令时,将产生一个中断,去通知OS本进程已经完成。 (2)异常结束:在进程运行期间,由于出现某些错误和故障而迫使进程终止。这类异常事件很多,常见的有:越界错误,保护错,非法指令,特权指令错,运行超时,等待超时,算术运算错,I/O故障。 (3)外界干预:外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。这些干预有:操作员或操作系统干预、父进程请求、父进程终止。 八、进程的终止过程 如果系统发生了上述要求终止进程的某事件后,OS便调用进程终止原语,按如下过程去终止指定的进程。 (1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程状态。 (2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真。用于指示该进程被终止后应重新进行调度。 (3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防他们成为不可控的进程。 (4)将被终止的进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。 (5)将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。 九、阻塞唤醒 1、引起进程阻塞和唤醒的事件 (1)请求系统服务:当正在执行的进程请求操作系统提供服务时,由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能转变为阻塞状态来等待,一旦要求得到满足后,进程被唤醒。 (2)启动某种操作:当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成,该操作完成后,将该进程唤醒。 (3)新数据尚未到达:对于相互合作的进程,如果其中一个进程需要先获得另一(合作)进程提供的数据才能运行以对数据进行处理,则是要其所需数据尚未到达,该进程只有(等待)阻塞,等到数据到达后,该进程被唤醒。 (4)无新工作可做:系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来,新任务到达后,该进程被唤醒。 2.进程阻塞过程 正在执行的进程,当发现上述某事件后,由于无法继续执行,于是进程便通过调用阻塞原语block()把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由执行改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即,保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU环境。 3. 进程唤醒过程 当被阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:05:02 0 浏览量 回答数 0

问题

Linux父进程先于子进程终止后子进程的ppid不是init进程的id 1

杨冬芳 2019-12-01 20:20:31 2183 浏览量 回答数 1

回答

不同的进程如何区分?在进程fork的时候,PCB被复制了一份,PCB内部的GDT和LDT都被复制了一份,其指向内核也表和父进程是一致的。且父进程自己的LDT和子进程的LDT都被设fork的过程是这样的:父进程fork子进程,子进程的PCB和父进程基本上是一样的,GDT和LDT期初是一样的,但是其数据段被设置为只读。当父进程(或子进程)发生写只读的数据段时,会发生一个异常,从而重新申请页表,使得父子进程指向不同的页表。这一切都是基于linux本身的lazy memory allocation的原则。

a123456678 2019-12-02 02:55:35 0 浏览量 回答数 0

回答

先说一下fork,fork会生成一个和当前进程相同的副本,称为子进程。原进程的所有资源都以适当的方式复制到子进程,因此该系统调用之后,原来的进程就有了两个独立的实例。这两个实例的联系包括:同一组打开文件、同样的工作目录、内存中同样的数据(两个进程各有一份副本)。当然Linux使用了copy on write,也就是说只有新的进程对内存页执行write操作的时候才会复制内存页面。具体如何完成:首先要了解一下task_struct这个数据结构。Linux内核很多涉及进程的部分都围绕这个数据结构(数据结构定义在include/sched.h中,有兴趣去看一下)。数据结构里面的成员非常多,下面会按照几个部分介绍一下。状态和执行信息,如待决信号、使用的二进制格式(和其他系统二进制格式的任何仿真信息)、进程ID号(pid)、到父进程及其他有关进程的指针、优先级和程序执行有关的时间信息(例如CPU时间)。有关已经分配的虚拟内存的信息。进程身份凭据,如用户ID、组ID以及权限等。可使用系统调用查询(或修改)这些数据。使用的文件包含程序代码的二进制文件,以及进程所处理的所有文件的文件系统信息,这些都必须保存下来。线程信息记录该进程特定于CPU的运行时间数据(该结构的其余字段与所使用的硬件无关)。在与其他应用程序协作时所需的进程间通信有关的信息。该进程所用的信号处理程序,用于响应到来的信号。fork之后,操作系统会copy当前进程的task_struct机构体,除了id号不一样之外,其余完全一样。fork之后如果没有调用exec(),那么仅仅只是生成多个当前的进程,提升并发的能力,比如说nginx。nginx的进程都是master进程fork出来的,所以他们有相同的监听句柄。至于是哪个worker进程去响应,nginx有自己的竞争方式。最后关于子进程fork自己会发生什么。请看下图:linux启动时候只有一个init进程,剩下的题主自行理解。

a123456678 2019-12-02 02:54:52 0 浏览量 回答数 0

问题

java多进程调度的问题

蛮大人123 2019-12-01 19:56:07 1130 浏览量 回答数 1

回答

先说一下fork,fork会生成一个和当前进程相同的副本,称为子进程。原进程的所有资源都以适当的方式复制到子进程,因此该系统调用之后,原来的进程就有了两个独立的实例。这两个实例的联系包括:同一组打开文件、同样的工作目录、内存中同样的数据(两个进程各有一份副本)。当然Linux使用了copy on write,也就是说只有新的进程对内存页执行write操作的时候才会复制内存页面。具体如何完成:首先要了解一下task_struct这个数据结构。Linux内核很多涉及进程的部分都围绕这个数据结构(数据结构定义在include/sched.h中,有兴趣去看一下)。数据结构里面的成员非常多,下面会按照几个部分介绍一下。状态和执行信息,如待决信号、使用的二进制格式(和其他系统二进制格式的任何仿真信息)、进程ID号(pid)、到父进程及其他有关进程的指针、优先级和程序执行有关的时间信息(例如CPU时间)。有关已经分配的虚拟内存的信息。进程身份凭据,如用户ID、组ID以及权限等。可使用系统调用查询(或修改)这些数据。使用的文件包含程序代码的二进制文件,以及进程所处理的所有文件的文件系统信息,这些都必须保存下来。线程信息记录该进程特定于CPU的运行时间数据(该结构的其余字段与所使用的硬件无关)。在与其他应用程序协作时所需的进程间通信有关的信息。该进程所用的信号处理程序,用于响应到来的信号。fork之后,操作系统会copy当前进程的task_struct机构体,除了id号不一样之外,其余完全一样。fork之后如果没有调用exec(),那么仅仅只是生成多个当前的进程,提升并发的能力,比如说nginx。nginx的进程都是master进程fork出来的,所以他们有相同的监听句柄。至于是哪个worker进程去响应,nginx有自己的竞争方式。最后关于子进程fork自己会发生什么。请看下图:

a123456678 2019-12-02 02:39:00 0 浏览量 回答数 0

回答

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top linux上进程有5种状态: 运行(正在运行或在运行队列中等待) 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) ps 工具标识进程的5种状态码: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process 1 2 3 4 5 命令参数: -A 显示所有进程 a 显示所有进程 -a 显示同一终端下所有进程 c 显示进程真实名称 e 显示环境变量 f 显示进程间的关系 r 显示当前终端运行的进程 -aux 显示所有包含其它使用的进程 1 2 3 4 5 6 7 8 实例: (1)显示当前所有进程环境变量及进程间关系 ps -ef 1 (2)显示当前所有进程 ps -A 1 (3)与grep联用查找某进程 ps -aux | grep apache 1 (4)找出与 cron 与 syslog 这两个服务有关的 PID 号码 ps aux | grep '(cron|syslog)'

黄二刀 2020-03-12 18:54:34 0 浏览量 回答数 0

问题

初学者求指教进程通信问题

杨冬芳 2019-12-01 20:25:26 806 浏览量 回答数 1

回答

1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。######正解!######自己顶一下###### 引用来自“火星人”的答案 1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。 不是使用select方法? ######类似 进程池###### 引用来自“ZYud”的答案 引用来自“火星人”的答案 1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。 不是使用select方法? 工作进程的事件处理方式是可选的,在编译的时候配置即可,windows下用的是select,linux下默认用的是epoll或者kqueue。 ###### 引用来自“火星人”的答案 1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。 可是按道理说一个端口可是有一个应用的多个进程同时占用,但只能被一个进程所监听的呀! 一般情况下都是master进程负责监听,将任务分配给不同的子进程,即使是master进程fork出来的,也只是或得那个socket的句柄,也并未真正获得监听句柄吧! 追问一下:多个进程可以监听同一个端口,岂不是不同的应用可以监听同一个端口! 能帮我写个简单的c例子么? ###### 引用来自“痞子汤”的答案 类似 进程池 进程池貌似跟这个是两码事儿吧 ###### 引用来自“火星人”的答案 1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄。 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接。 对于第二点,如果他是这么实现的,岂不是性能是master进程负责监听分配任务的方式底,毕竟master的事儿没少做,还有资源竞争的代价在里面 ###### 多个进程可以监听同一个端口,岂不是不同的应用可以监听同一个端口! 两个完全独立的进程 , 和 fork 出来的父子进程是有区别的吧。  再说我觉得和进程池有 点类似,图已经表明  在accept 之前你 fork 一堆子进程,在子进程内进行 accept 应该莫有问题吧 ######个人理解

爱吃鱼的程序员 2020-06-02 17:27:47 0 浏览量 回答数 0

回答

死锁产生的4个必要条件:1、互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。2、请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。3、不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。4、循环等待条件: 若干进程间形成首尾相接循环等待资源的关系

1565966273186108 2019-12-02 01:50:32 0 浏览量 回答数 0

问题

父进程通过管道与curses子进程通信,管道不能写数据:报错

kun坤 2020-06-09 12:00:19 1 浏览量 回答数 1

问题

僵死进程是怎么被回收的?

a123456678 2019-12-01 19:45:03 1057 浏览量 回答数 1

回答

"进程包含如下3个特征。 独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。 动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。在进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。 并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。"

星尘linger 2020-04-12 11:41:31 0 浏览量 回答数 0

回答

进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。 进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。 一个进程内可拥有多个线程,进程可开启进程,也可开启线程。 一个线程只能属于一个进程,线程可直接使用同进程的资源,线程依赖于进程而存在。

游客bnlxddh3fwntw 2020-04-10 13:18:19 0 浏览量 回答数 0

回答

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。 线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。 一个程序至少一个进程,一个进程至少一个线程。 进程线程的区别:     地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。     资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。      一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程     执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。     线程是处理器调度的基本单位,但是进程不是。 两者均可并发执行。 线程安全是多线程编程时的计算机程序代码中的一个概念。 在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。 线程安全问题大多是由全局变量及静态变量引起的,局部变量逃逸也可能导致线程安全问题。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

问问小秘 2020-01-03 13:53:34 0 浏览量 回答数 0

问题

云监控主机监控的进程监控

反向一觉 2019-12-01 21:24:10 1690 浏览量 回答数 1

回答

首先问题是:wait(NULL)和waitpid(-1,NULL,WNOHANG)的区别。一个是阻塞的一个是非阻塞的。阻塞的是当没有已终止的子进程,不过有一个或多个子进程仍在运行时,wait将阻塞到现有子进程第一个终止为止;而waitpid里的WNOHANG选项告知内核在没有一终止的子进程时不要阻塞,在有尚未终止的子进程时也不要阻塞。这样的好处是,当有多个子进程同时终止时,wait只能处理一个或几个终止进程,因为它阻塞在某个终止进程时,调用信号处理函数,而此时更多的SIGCHLD信号到来,它处理不了,就会变成僵尸进程。而waitpid是非阻塞模式,能保证处理完所有终止的子进程。所以,它俩最大的区别就是能不能全部的处理掉所有的终止子进程。

小旋风柴进 2019-12-02 02:33:40 0 浏览量 回答数 0

问题

服务器phpcgi.exe进程好多,CPU达到100%,请问怎么解决?

蛋蛋丶 2019-12-01 21:33:10 7207 浏览量 回答数 4

问题

关于linux里父进程与子进程的文件共享

a123456678 2019-12-01 19:57:25 861 浏览量 回答数 1

问题

linux进程在什么情况下需要创建线程?

a123456678 2019-12-01 19:55:15 1069 浏览量 回答数 1

回答

建议你用两个子进程来做!查下精灵进程的概念吧。 你的子进程和父进程现在是共用的一个输入输出!或者更改子进程的托管进程。 linux/unix的进程概念挺复杂的。

kun坤 2020-06-09 12:00:38 0 浏览量 回答数 0

问题

阿里云进程监控中进程数统计只统计父进程吗?

aeta 2019-12-01 20:09:02 478 浏览量 回答数 1

回答

死锁产生的4个必要条件    1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。    2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。    3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。    4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。

Zzz 2019-12-02 01:50:32 0 浏览量 回答数 0

问题

服务器被植入 恶意进程(云查杀)-挖矿程序,怎么处理

jason.gao 2019-12-01 20:08:56 5632 浏览量 回答数 6

回答

在Linux内核中,调度器可以分成两个层级,在进程中被直接调用的成为通用调度器或者核心调度器,他们作为一个组件和进程其他部分分开,而通用调度器和进程并没有直接关系,其通过第二层的具体的调度器类来直接管理进程每个进程必然属于一个特定的调度器类,Linux会根据不同的需求实现不同的调度器类。各个调度器类之间具备一定的层次关系,即在通用调度器选择进程的时候,会从最高优先级的调度器类开始选择,如果通用调度器类没有可运行的进程,就选择下一个调度器类的可用进程,这样逐层递减。每个CPU会维护一个调度队列称之为就绪队列,每个进程只会出现在一个就绪队列中,因为同一进程不能同时被两个CPU选中执行。就绪队列的数据结构为struct rq,和上面的层次结构一样,通用调度器直接和rq打交道,而具体和进程交互的是特定于调度器类的子就绪队列。

huanhuanming 2019-12-02 01:50:33 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站