命令行在程序执行中的使用

6 篇文章 0 订阅
1 篇文章 0 订阅

    我们做开发的时候,比如需要调用api实现的一些功能,比如杀掉某个进程,获取当前进程列表(判断当前有无某个进程),或者注册服务,或者查找当前某个端口是否有被占用的时候。大部分都是通过获取api进行解决,查接口文档比如msdn,或者系统相关的接口看是否有可以实现功能的函数。但是我在这里讲解一下另外一种方法,希望对大家有用。

    介绍这个之前先说一个在windows和linux上都有的东西,命令行管道。比如说:我想获取当前进程列表中是否有一个叫做chrome的进程。用Windows命令行可以这么写:tasklist /FO CSV | findstr "chrome.exe",linux应该是ps aux | less | grep "chrome",执行结果如下图:

    Windows上情况(加入CSV格式化会让之后的处理方便一些,比如获取第一行之后直接split(",")[1]就可以拿到进程pid):

Windows查找chrome进程

    linux上情况(ubuntu自带firefox这里就用firefox了):

linux查找firefox进程
这样就可以根据输出判定某个进程存在,对于不存在的情况也很明显比如:
Windows上进程不存在就没有对应输出
这样就会没有输出,大致原理就是这样。

就算是对于同名进程,也有命令行参数不一样可以区分当前进程具体是干嘛的,比如Wmic命令行,
转一篇文章:这里很好的对wmic命令行有介绍。(不知道为啥wmic对于管道的处理不支持,比如wmic process list | findstr "chrome"会得到一堆乱码)。

WMIC介绍博客:https://blog.csdn.net/swazer_z/article/details/60100596

常见Windows命令(windows上所有命令都可以/?,linux可以–help查看帮助文档,选择合适的参数指定功能):
netstat(端口相关,比如查找某个端口被占用很实用)
tasklist(进程列表相关)
taskkill(杀进程)
wmic(参见博客内容)
net(建立服务,用户管理配置等等,非常强大)
explorer(资源管理器,可供指定打开某一个目录)
rundll32.exe(可以通过指定打开文件方式打开文件)

对于不需要获取返回值的情况,可以简单ShellExecute(或者exec)+参数解决.
对于需要获取返回值并对返回值进行处理的时候,可以用管道执行程序(popen)
popen资料参考:
https://blog.csdn.net/stone8761/article/details/77498439
读取返回值进行分析.
Windows上也有专有的api可以实现读取命令行返回值的功能CreatePipe&ReadFile这样配合就能读取管道的输出.当然用popen也没有啥问题,只是字符集的问题在cmd下会出现乱码这个问题不太好解决.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值