标签:integer 它的 The return data 结束 教程 线程 注意
参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064
在计算机领域中,尤其是Unix及类Unix系统操作系统中,fork(进程复制)是一种创建自身行程副本的操作。它通常是内核实现的一种系统调用。Fork是类Unix操作系统上创建进程的一种主要方法,甚至历史上是唯一方法。
在多任务操作系统中,行程(运行的程序)需要一种方法来创建新进程,例如运行其他程序。
如果进程需要启动另一个程序的可执行文件,它需要先Fork来创建一个自身的副本。然后由该副本即“子进程”调用exec系统调用,用其他程序覆盖自身:停止执行自己之前的程序并执行其他程序。
当一个进程调用fork时,它被认为是父进程,新创建的进程是它的孩子(子进程)。在fork之后,两个进程不仅运行着相同的程序,并且它们恢复执行(好像它们都已被系统调用)both processes not only run the same program, but they resume execution as though both had called the system call. 。然后它们可以检查调用的返回值确定其状态:是父进程还是子进程,以及据此行事。
Ruby核心模块Process提供了大量和unix对应的接口方法。
fork[{block}] -> integer or nil
创建子进程。如果提供了block则会在子进程内运行。子进程终止会返回一个状态码0。
调用fork会返回两次,一次是父进程,它返回孩子进程的ID; 另一次是孩子进程,返回nil。
孩子进程使用Kernel.exit!来退出。
父亲进程需要使用Process.wait来收集孩子进程的终止状态码。
exec([env,] command...[,options])
子进程调用exec方法,通过运行参数的命令取代当前进程。
pid -> integer
返回当前进程的id. Process.pid => 37415
ppid -> integer
返回当前进程的父进程的id.
多线程教程:https://www.runoob.com/ruby/ruby-multithreading.html
Python的os
模块封装了常见的系统调用,其中就包括fork
,可以在Python程序中轻松创建子进程
import os print(‘Process (%s) start...‘ % os.getpid()) # Only works on Unix/Linux/Mac: pid = os.fork() if pid == 0: print(‘I am child process (%s) and my parent is %s.‘ % (os.getpid(), os.getppid())) else: print(‘I (%s) just created a child process (%s).‘ % (os.getpid(), pid))
注意:Windows没有fork
调用。
这个模块支持Win和Unix系统。
创建一个Process对象,然后调用它的start()方法。
join([timeout])方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
标签:integer 它的 The return data 结束 教程 线程 注意
原文地址:https://www.cnblogs.com/chentianwei/p/11881180.html