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

2016-02-16 11:55:36 +08:00
 nladuo

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

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

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

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

效果图:

4657 次点击
所在节点    Linux
24 条回复
nladuo
2016-02-16 18:52:13 +08:00
@hitmanx 没有 stop 。我还没加,主要是没想好,比如说调用 service stop 之后,运行的应用怎么办,是都停掉还是不停掉。可以给提一下意见哈。
wizardoz
2016-02-16 19:36:56 +08:00
hitmanx
2016-02-16 22:01:35 +08:00
@nladuo 多谢回复,下班前试了下还是很酷炫的,就是没找到 stop 的方法有点意外。最好在 stop 时提供给用户交互式选择是否将运行的应用关闭,这样灵活性大一点,还有就是如果选择不关闭,最好能告诉我这些依然活跃的应用的 pid 。

另外刚才洗完澡看了下代码,没有看得很仔细,如有说错的请见谅。第一感觉是 server 端的锁加的力度是不是太大了,两个线程几乎所有主要的业务都在这个大的锁里面。二是有些检查,比如可执行文件是否存在之类的,我没看错的话是放在 client 端执行的, server 端是不再做检查的,我没想好这样是否合理。如果重复检查可能也没必要,是不是索性 client 端只做参数的基本校验,透明传输给 server ,由 server 来做校验更好?且我看现在 client 里大部分函数例如 start/stop_all,status , start/stop_process 等等,其实现阶段干的事是完全相同的。另外就是感觉如果把一些内容稍微封装一下,比如 domain_socket 的 ipc 、或者一些数据结构的之类的操作封装一下,应该很能短小、简洁很多。
nladuo
2016-02-16 22:56:46 +08:00
@hitmanx
多谢评价,你说的 client 和 server 封装那块我再好好构思一下改改,这其实是第一次写 c 语言的应用,多谢指导哈, ipc 那块我还没看到,就看了看进程和线程以及简单的 socket ,跳着看的。那个锁那块主要是因为我觉得两个线程一般都处于阻塞的状态,所以可能不太会影响到性能。
接下来可能会先加一个开机自启动的脚本,然后再慢慢重构,写的时候感觉代码写的确实有些别扭,写了挺多重复的代码,但又有些不知道怎么改是好,慢慢进步吧。谢谢指导。^_^

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX