V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
nladuo
V2EX  ›  Linux

用 c 语言写了个 linux 下的进程管理工具

  •  1
     
  •   nladuo ·
    nladuo · Feb 16, 2016 · 5341 views
    This topic created in 3727 days ago, the information mentioned may be changed or developed.

    之前一直想学学 linux 下的 c 语言编程,这个假期终于开始了。

    学到线程和进程那块,也想不到什么好例子,于是想起之前用的进程管理工具, pm2 和 supervisor 。第一个感觉非常好用,但是还要装 npm ,主要是为了 nodejs 开发者用的。第二个感觉用起来稍微麻烦一点,要写配置文件,而且显示效果没有 pm2 好看。

    于是模仿着 pm2 的界面,自己写一个简单的管理工具。

    链接: https://github.com/nladuo/KB-PM

    效果图:
    效果图

    24 replies    2016-02-16 22:56:46 +08:00
    mikicomo
        1
    mikicomo  
       Feb 16, 2016   ❤️ 1
    歪个楼...看着题主的头像,差点看成用 go 语言写了个....
    nladuo
        2
    nladuo  
    OP
       Feb 16, 2016
    @mikicomo 一般用 go 语言写东西。(⊙o⊙)
    mikicomo
        3
    mikicomo  
       Feb 16, 2016   ❤️ 1
    @nladuo 活捉 go 粉一枚
    nladuo
        4
    nladuo  
    OP
       Feb 16, 2016
    @mikicomo 嘿嘿
    neoblackcap
        5
    neoblackcap  
       Feb 16, 2016
    其实就是写 daemon 对吧,这个我之前也看了, APUE 里面的两次 fork
    mikicomo
        6
    mikicomo  
       Feb 16, 2016   ❤️ 1
    @nladuo follow 为敬
    nladuo
        7
    nladuo  
    OP
       Feb 16, 2016
    @neoblackcap 恩,有挺多细节。
    nladuo
        8
    nladuo  
    OP
       Feb 16, 2016
    @mikicomo 谢谢哈
    neoblackcap
        9
    neoblackcap  
       Feb 16, 2016
    @nladuo 的确还有很多细节,比如 IPC 之类,不过就是 APUE 那个例子实在是太经典了,一下子就想到那个
    nladuo
        10
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @neoblackcap 我看的书叫 《 linux 程序设计》, APUE 看了看电子书。
    lcqtdwj
        11
    lcqtdwj  
       Feb 16, 2016
    nice,已 star
    wizardoz
        12
    wizardoz  
       Feb 16, 2016
    原来我看过一本《 Linux 实用编程》都是讲的一些 Linux 命令行工具的实现。对于已经有一定编程基础的人了解 Linux 系统很有帮助。
    neoblackcap
        13
    neoblackcap  
       Feb 16, 2016
    @nladuo 原理其实都差不多,最多就是 API 有区别,这个时候看看 man 就可以了。
    nladuo
        14
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @lcqtdwj 谢谢哈
    nladuo
        15
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @wizardoz 刚刚百度没搜到这本书,英文版的?
    nladuo
        16
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @neoblackcap 嗯。
    shyling
        17
    shyling  
       Feb 16, 2016
    厉害~如果启动一个自己 fork 了 2 次成 daemon 的程序会不会脱离管理
    nladuo
        18
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @shyling 这个是会的。只能管理单进程的应用。
    hitmanx
        19
    hitmanx  
       Feb 16, 2016
    mark 一下,回家看看
    hitmanx
        20
    hitmanx  
       Feb 16, 2016
    貌似 server 只有 start 没有 stop?还是我看花了>_<
    nladuo
        21
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @hitmanx 没有 stop 。我还没加,主要是没想好,比如说调用 service stop 之后,运行的应用怎么办,是都停掉还是不停掉。可以给提一下意见哈。
    hitmanx
        23
    hitmanx  
       Feb 16, 2016   ❤️ 1
    @nladuo 多谢回复,下班前试了下还是很酷炫的,就是没找到 stop 的方法有点意外。最好在 stop 时提供给用户交互式选择是否将运行的应用关闭,这样灵活性大一点,还有就是如果选择不关闭,最好能告诉我这些依然活跃的应用的 pid 。

    另外刚才洗完澡看了下代码,没有看得很仔细,如有说错的请见谅。第一感觉是 server 端的锁加的力度是不是太大了,两个线程几乎所有主要的业务都在这个大的锁里面。二是有些检查,比如可执行文件是否存在之类的,我没看错的话是放在 client 端执行的, server 端是不再做检查的,我没想好这样是否合理。如果重复检查可能也没必要,是不是索性 client 端只做参数的基本校验,透明传输给 server ,由 server 来做校验更好?且我看现在 client 里大部分函数例如 start/stop_all,status , start/stop_process 等等,其实现阶段干的事是完全相同的。另外就是感觉如果把一些内容稍微封装一下,比如 domain_socket 的 ipc 、或者一些数据结构的之类的操作封装一下,应该很能短小、简洁很多。
    nladuo
        24
    nladuo  
    OP
       Feb 16, 2016 via iPhone
    @hitmanx
    多谢评价,你说的 client 和 server 封装那块我再好好构思一下改改,这其实是第一次写 c 语言的应用,多谢指导哈, ipc 那块我还没看到,就看了看进程和线程以及简单的 socket ,跳着看的。那个锁那块主要是因为我觉得两个线程一般都处于阻塞的状态,所以可能不太会影响到性能。
    接下来可能会先加一个开机自启动的脚本,然后再慢慢重构,写的时候感觉代码写的确实有些别扭,写了挺多重复的代码,但又有些不知道怎么改是好,慢慢进步吧。谢谢指导。^_^
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2472 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:05 · PVG 16:05 · LAX 01:05 · JFK 04:05
    ♥ Do have faith in what you're doing.