精华内容
下载资源
问答
  • 一个程序个进程

    千次阅读 2011-04-08 18:20:00
     说白了就是,一个程序可以重复运行,开几个窗口,比如网游的“双开”,一个进程可以对应多个程序就是一个DLL文件可一被多个程序运用,比如DirectX9的动态链接库,就是,许多游戏都要有它才能运行。

    如何理解一个程序可以对应多个进程,一个进程也可以对应多个程序?

     

    说白了就是,一个程序可以重复运行,开几个窗口,比如网游的“双开”,
    一个进程可以对应多个程序就是一个DLL文件可一被多个程序运用,比如DirectX9的动态链接库,就是,许多游戏都要有它才能运行。
    展开全文
  • 我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程 那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOINT 运行一个”东西”,然后再让这个”东西”...

    我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程

    那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOINT 运行一个”东西”,然后再让这个”东西”运行多个其他进程
    简单说来是用Bash Shell脚本或者三方进程守护 (Monit,Skaware S6,Supervisor),其他没讲到的三方进程守护工具同理

    Bash Shell脚本

    入口文件运行一个Bash Shell 脚本, 然后在这个脚本内去拉起多个进程
    注意最后要增加一个死循环不要让这个脚本退出,否则拉起的进程也退出了
    run.sh

     

     

    在Dockerfile的入口中运行run.sh

     

    用Bash Shell 的方式,任意发行版的linux都支持,缺点是不能拉起crash的进程,也就是只能拉起运行不能”守护”
    如果不关心进程crash问题那么可以用这种方式

    三方容器进程初始化之-dumb-init

    dumb-init官方
    A minimal init system for Linux containers
    一个最小化的Linux容器初始化系统
    dumb-init是一个简单的进程监控器和init系统,设计为在最小容器环境(如Docker)中作为PID 1运行。它被部署为一个用C编写的小型静态链接二进制文件。
    Dockerfile 参考

     

    ServiceMesh的数据平面Envoy Proxy的容器镜像就是使用的dumb-init

    三方容器进程初始化之-tini

    tini官方
    A tiny but valid init for containers
    容器的一个小而有效的init

    三方进程守护之-Monit

    Monit和Supervisor还是有很大区别的,Supervisor管理的都是前台执行的进程,Monit既可以管理前台进程也可以管理后台进程,简单的说,在CentOS中使用service xxx start 启动的程序,使用Monit可以直接管理,这就解决了很多没有前台方式启动的程序不能用Supervisor来管理的问题。
    Dockerfile 参考

     

    三方进程守护之-Supervisor

    大名鼎鼎的 Supervisor
    如果有多种版本的linux要用那么可以用Supervisor做统一进程守护管理,网上资料一大堆
    注意要以前台程序运行,配置文件中要有,如果是后台的方式docker会退出

     

    Dockerfile 参考

     

     

    三方进程守护之-Skaware S6

    Supervisor是常见的进程守护程序,不过程序文件太大,想要容器镜像尽量小,在特别是用Alpine作为基础镜像的时候推荐使用Skaware S6
    参考这个微服务基础镜像 https://github.com/nicholasjackson/microservice-basebox 他就是用 Skaware 作为进程守护程序运行多个进程的
    如果基础容器镜像是本身就是Alpine,那就再合适不过了
    Dockerfile 参考

     

     

    cron.run example

     

     

    app.run example

     

     

    三方进程守护之-s6-overlay

    s6-overlay 是基于 Skaware S6适用于容器的进程守护工具
    s6-overlay 官网 https://github.com/just-containers/s6-overlay
    Dockerfile 参考

     

     

    三方进程守护之-runit

    runit官网http://smarden.org/runit/
    具体的使用方法见官网
    在Docker生态圈, phusion/baseimage-docker, gitlab 在使用runit作为进程管理工具

    下面以要运行cron 和 ssh 为例
    /etc/service/ 为配置文件目录

    /etc/service/sshd 为要运行的程序目录
    /etc/service/sshd/run 为需要运行的程序入口脚本文件
    cat run

     

     

    /etc/service/cron 为要运行的程序目录
    /etc/service/cron/run 为需要运行的程序入口脚本文件
    cat run

     

     

    Dockerfile 参考

     

     

    三方进程守护之-Systemd

    在 docker 中使用 Systemd 需要在 docker run 的时候开启特权模式 –privileged ,所以不推荐
    这个直接放弃了
    Dockerfile 参考

     

     

    参考资料

    Alpine里的go应用,你猜他能有多小? http://blog.csdn.net/sisiy2015/article/details/50350261
    如何运行多进程Docker容器? http://dockone.io/article/951
    在Docker Container中启动定时任务 http://dockone.io/article/1070
    Docker容器内多进程管理(一)-Supervisor http://www.linuxprobe.com/docker-process-management1.html
    Docker容器内多进程管理(二)-Monit http://www.linuxprobe.com/docker-process-management2.html
    关于S6和Runit的论坛讨论 S6 or Runit, not systemd https://www.linuxquestions.org/questions/slackware-14/s6-or-runit-not-systemd-4175465428/
    [译] runit 快速入门 https://segmentfault.com/a/1190000006644578

    转载于:https://www.cnblogs.com/sunsky303/p/11046681.html

    展开全文
  • 我们玩游戏算一个程序,需要显示图像的驱动,声音驱动、IO驱动的同时执行。 就这么简单。 我的理解:大家知道bat文件可以当做命令call的。 你写了一个实现了拷贝的功能的bat文件,又写了一个实现删除功能的bat...
    百度知道的答案:
    比如显示图像的驱动程序,多个程序的显示都是需要他来执行。
    我们玩游戏算一个程序,需要显示图像的驱动,声音驱动、IO驱动的同时执行。
    就这么简单。

    我的理解:大家知道bat文件可以当做命令call的。
    你写了一个实现了拷贝的功能的bat文件,又写了一个实现删除功能的bat文件,这就是两个程序了。
    然后你在执行一个命令行,顺序调用这两个程序,就会实现一个剪切文件的功能。
    于是你剪切文件的这个一个进程就执行了你的这两个程序。

    其实这个东西咋一看不好理解,主要是人们总觉得程序应该是一个界面完整、包含业务逻辑和数据的软件。而在这句话中,一个函数就是一个程序了,程序片段也算程序。
    展开全文
  • 在学习代码的过程中,遇到了这样一个问题:一个程序,在需求上只允许产生一个进程,即不可重复运行,于是就产生了如何保证系统中只有一个进程存在的问题。这个问题网上的代码很多,不过都是一个解决办法,就是当程序...
    在学习代码的过程中,遇到了这样一个问题:一个程序,在需求上只允许产生一个进程,即不可重复运行,于是就产生了如何保证系统中只有一个进程存在的问题。这个问题网上的代码很多,不过都是一个解决办法,就是当程序二次运行的时候,如果发现系统中已经存在进程,则退出运行。不过我做的练习想实现另一种保持单例的方法,就是每次运行都杀掉那个老的进程,让新进程生成,虽然这个做法似乎通用性不好,不过在一些特殊情况还是有用的,比如我这个练习  ^_^

    还是先写一下那比较常见的办法,蛮简单:
    uses    //uses这里不知道是不是引用了多余的东西,呵呵,没检查~
      Windows, Messages, SysUtils, Dialogs;
    var
      FormHandle : THandle;
    begin
      FormHandle := windows.OpenMutex(MUTEX_ALL_ACCESS,false,'test');   //这里的test似乎是可以随便写的
      if FormHandle <> 0 then
      begin
        ShowMessage('程序已经运行');
      end
      else
      begin
        windows.CreateMutex(nil,false,'test');    这里的test和上面那个要一致,这是对这程序的标识
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end;
    end.

    注意:这种处理方法的例子很多,写法也有不少,我这个是最基本的方法,应该是不大严谨,不过倒是好用,嘻嘻

    下面是我费了好大劲想出来的,杀掉旧进程的做法:
    uses
      Windows, Messages, SysUtils, Forms, Dialogs, tlhelp32;
    var
      FormHandle : THandle;
      hand:thandle;
      lppe:PROCESSENTRY32;
      found:boolean;
    begin
      Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);    //这句,不懂,看来的,嘎嘎
      if hand>0 then
        lppe.dwSize:= sizeof(PROCESSENTRY32);    //初始化,没啥特别的
      FormHandle := windows.OpenMutex(MUTEX_ALL_ACCESS,false,'test');   //这里和上面一样啦
      if FormHandle <> 0 then
      begin
        found:=Process32First(Hand,lppe);   //开始遍历进程列表啦
        while found do
        begin
          if strpas(lppe.szExeFile) = ExtractFileName(Application.ExeName) then   //判断是否是当前程序的进程
          begin
             //下面这句是终止这个进程
            TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS,FALSE,lppe.th32ProcessID),1);
            break;   //这句是必须的,因为新进程已经生成,所以同名进程有两个,杀掉旧的就跳出循环了
                          //不然连新的一起杀掉了,所谓见好就收哇
          end;
          found:=Process32next(Hand,lppe);
        end;
      end
      else
      begin
        windows.CreateMutex(nil,false,'test');   //这里也是
      end;
      Application.Initialize;    //这里不同,是把它们拿到判断语句外面了,因为杀掉旧进程,新进程要运行嘛
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.

    注意:这里用到的思路是遍历了进程列表,获得旧进程,并杀掉。曾经担心新进程会不会跑到进程列表前面去,不过在后来的测试中感觉进程列表应该是顺序添加的,所以新进程应该是在列表的后面的,至少我目前是这个情况嘎。
    展开全文
  • Android中如何设置两个应用程序为同一个进程?1.在&lt;manifest&gt;里面添加:android:sharedUserId,注意这个属性的取值必须包含点(dot),也就是诸如java packae的形式。比如com.aaa.bbb。没有dot的话,...
  • 天看见一个关于进程程序区别的故事比较不错:  一位厨艺很好的计算机科学家正在为他的女儿烘制生日蛋糕。他做的生日蛋糕有食谱,厨房中有所需要的原料:面粉、糖、奶油等。在这个比喻中,做蛋糕的食谱就是程序...
  • Java中main方法启动的是一个线程也是一个进程,一个java程序启动后它就是一个进程,进程相当于一个空盒,它只提供资源装载的空间,具体的调度并不是由进程来完成的,而是由线程来完成的。一个java程序从main开始之后...
  • nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂断的意思( no hang up)。 该命令...
  • C# 创建互斥进程(程序) 互斥进程(程序), 简单点说,就是在系统中只能有该程序一个实例运行. 现在很多软件都有这功能,如Maxthon 可以设置为"只允许打开一个窗体",还有Bitcomet等. 我也是看到这些软件的这个功能才来...
  • 进程与线程的关系 简单复习一下:一个”进程“代表中计算机中实际跑起来的一个程序,在现代操作系统...因此一个进程至少得有一个线程,我们把这个线程称之为”主线程“,也就是说,一个进程至少要有一个主线程。 ...
  • 一个进程从主线程的执行开端进而创立一个或多个附加线程,就是所谓基于多线程的多任务。 那进程与线程的区别到底是什么?进程是执行程序的实例。例如,当你运转记事本程序(Nodepad)时,你就创立了一个用来包容...
  • VMware Workstation开启虚拟机时失败,提示:另一个程序已锁定文件的一部分,进程无法访问,截图如下: 错误原因: 虚拟机在运行的时候,会锁定文件防止被修改,而如果系统突然崩溃(比如说蓝屏了,俺就是因为蓝屏)...
  • 用过金山词霸的人可能都会发现,当你把金山词霸打开,如果再去双击金山词霸 的快捷方式来启动它的时候,系统没有为我们再启动一个新的进程而是激活了前面我们已经打开的金山词霸程序,也就是说我们在一台计算机上...
  • 是一个线程也是一个进程,一个java程序启动后它就是一个进程,进程相当于一个空盒,它只提供资源装载的空间,具体的调度并不是由进程来完成的,而是由线程来完成的。一个java程序从main开始之后,进程启动,为整个...
  •  进程:就像侯老师书上所说,它其实就是一个数据结构体,用来管理它自己的那些线程,不过它是计算机分配资源的基本单位,它有自己的资源。不过每个进程的独立的,进程之间的通讯是一个很麻烦是过程,也是很消耗资源...
  • 执行一个程序,必然就产生一个进程。最直接的程序执行方式就是在shell中以鼠标双击某一个可执行文件图标,执行起来的App进程起始是shell调用CreateProcess激活的。 1.shell调用CreateProcess激活App.exe 2.产生一个...
  • Linux一个进程最多能开启的线程数

    千次阅读 2019-03-22 09:11:35
    对于一个进程,它在被执行前是一个可执行程序。这个程序是被放在磁盘上的,当它要被执行的时候,它先被加载到内存当中,然后再放入到寄存器中,最后再让cpu执行该程序,这个时候一个静态的程序就变成了进程。 操作...
  • Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务 守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,...
  • 今天在使用python的时候,突发奇想可不可以在运行一个程序的时候再执行另外一个python文件,在网上找到了几种方法,python2和python3有一些差别 os.system import os os.system('python filename.py') 该命令是在当前...
  • 如何打开 两个Editplus(窗口 进程),不想在一个窗口多标签打开程序,这样子很难对比程序? 额……经历千辛万苦>__<无论是改注册表,还是改配置文件,都没办法解决T-T 终于找到解决方法了呜呜T-T 真相就是,安装,...
  • kafka在windows平台就是有这BUG,没办法。只能手动删除\kafka-logs里的日志文件重启kafka 亲测有效! 参考官方:https://issues.apache.org/jira/browse/KAFKA-1194  
  • 用IIS管理器启动网站时,出现“另一个程序正在使用此文件,进程无法访问。”的错误提示。说明 此服务器的tcp 80端口已打开。一般情况下,可能是有另一个WEB服务已启动,它打开了80端口,另一种可能就是某个软件打开...
  • 不是,shell脚本本身不能作为一个进程。shell脚本由一个shell解释程序来...这个shell解释程序是单独的一个进程,脚本中的外部命令也都作为独立进程依次被运行。这也就是为什么ps不能找到正在运行的脚本的名字的原因了。
  • 点击启动后居然弹出:“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020)”也就是我的default web site 无法启动。 上次一顿搜索,欣喜的发现好文章一篇...
  • 在默认情况下,Windows 系统中启动一个进程会继承父进程的令牌。如果父进程是管理员权限,那么子进程就是管理员权限;如果父进程是标准用户权限,那么子进程也是标准用户权限。 我们也知道,可以使用一些方法为自己...
  • 如何重启一个控制台程序

    千次阅读 2013-07-23 22:58:02
    作者:朱金灿来源:http://blog.csdn.net/clever101 在《VC实现程序重启的做法》一文中我介绍了如何重启一个GUI程序的做法,今天研究了一下如何重启一个控制台程序,发现其实也很简单,简而言之就是新建一个进程,...
  • 这其中涉及到终端登录的问题,先对终端登录进行小总结: init在创建子进程后,子...从getty开始exec到login,再exec到bash,其实都是同一个进程,因此控制 终端没变,文件描述符0、1、2也仍然指向控制终端。由于fork会
  • IIS建立新网站出错-另一个程序正在使用此文件,进程无法访问 “另一个程序正在使用此文件,进程无法访问!”。这就是在使用IIS创建一个新网站时候提示的错误。看到这个错误真的是丈二和尚摸不着头脑。目录访问权限...
  • Android应用程序进程管理

    千次下载 热门讨论 2013-10-23 01:21:26
    Zygote进程是由系统中的第一个进程init负责启动。此外,用来运行各种系统服务的System Server进程也是由Zygote进程创建的。进程回收发生在内存紧张时,由Low Memory Killer执行。此外,组件管理服务ActivityManager...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,882
精华内容 11,552
关键字:

一个进程就是一个程序