linux 获得打开指定文件进程的PID和该进程的绝对路径 C语言

下面代码效果是查出哪个进程打开了指定文件,可以查出打开文件进程的PID以及该进程所在linux的绝对路径(只能查出一个,想得出全部的需要小改一下代码),并且可以自己选择是否kill掉这个进程

#include <stdio.h>
#include <string.h>
#include <stdlib.h>//执行命令行输出并且得到结果
//cmd shell命令
//result 输出结果
void executeCMD(const char* cmd,char *result)
{char buf_ps[1024];char ps[1024]={0};FILE* ptr;strcpy(ps,cmd);if((ptr=popen(ps,"r"))!=NULL){while(fgets(buf_ps,1024,ptr)!=NULL){//shell print in resultprintf("shell print:%s",buf_ps);strcpy(result,buf_ps);result[strcspn(result,"\n")]='\0';if(strlen(result)>1024)break;}pclose(ptr);ptr = NULL;}else{printf("popen %s error\n",ps);}
}//根据pid杀死线程
void killpid(int pid)
{char order[512]={0};char ret[512]={0};if(sprintf(order,"kill -9 %d",pid)<0)printf("sprintf() error!\n");executeCMD(order,ret);//printf("ret : %s",ret);//printf("???");return;
}//得到线程pid
//filePath 文件绝对路径
//pidResult 返回使用这个文件的进程
void getPid(const char* filePath,char* pidResult)
{char order[256]={0};if(sprintf(order,"/usr/bin/lsof %.*s | awk \'{print $2}\' | grep -v \"PID\"",(int)strlen(filePath),filePath)<0)printf("sprintf() error! function in getPid\n");executeCMD(order,pidResult);return;
}int main()
{char result[256]={0};char order[256]={0};char resultPid[32]={0};char filePath[256]={0};//指定的文件路径sprintf(filePath,"/home/projects/protectFile/ld_test.c");getPid(filePath,resultPid);int pid = atoi(resultPid);if(sprintf(order,"readlink -f /proc/%d/exe",pid)<0)printf("sprintf() error! function in main\n");executeCMD(order,result);if(0) //这里条件判断这个进程允不允许打开文件,不允许就kill掉{killpid(pid);}	return 0;
}

printf输出 

shell print:2189
shell print:/home/projects/protectFile/continueOpenFile.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot整合RocketMQ实现延迟消息消费

导包 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version></dependency>添加配置信息 application配置文件 # rocketMq地址 rocketmq.name…

Ubuntu+Apache2 搭建Gerrit 环境

一、前言 时隔多年&#xff0c;好久没有更新CSDN 博客了&#xff0c;主要原因有如下两点&#xff1a; 1、平时工作繁忙&#xff0c;无暇更新。 2、工作内容涉及信息安全&#xff0c;一些工作经验积累不便更新到互联网上。 最近一直在折腾搭建Gerrit 环境&#xff0c;最开始是…

基于Transformer的自监督学习在NLP中的前沿应用

1. 引言 自然语言处理&#xff08;NLP&#xff09;领域正经历一场由自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;和Transformer架构共同驱动的革命。自监督学习通过巧妙地利用未标注数据&#xff0c;大大减少了对人工标注的依赖&#xff0c;而Transforme…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR&#xff08;Pedestrian Dead Reckoning&#xff0c;即行人航位推算&#xff09;背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下&#xff0c;对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…

Nacos、Sentinel底层核心原理

Nacos和Sentinel都是服务于微服务架构的组件&#xff0c;但它们各自承担不同的角色和功能。 ### Nacos的核心原理&#xff1a; 1. **服务发现与注册中心**&#xff1a;Nacos作为服务注册中心&#xff0c;允许服务实例在启动时注册自己&#xff0c;并在关闭时注销。客户端可以通…

如何正确选择EC油封端盖?

在机械系统中&#xff0c;EC油封端盖扮演着关键角色。正确选择密封圈不仅能确保系统的正常运行&#xff0c;还能延长设备的使用寿命。本文将从多个角度探讨如何选择合适的EC油封端盖。 分析应用环境 操作环境&#xff1a; 温度范围&#xff1a;确定操作环境的温度范围。像FK…

超越常规:深度定制Ant Design Vue组件样式

标题&#xff1a;超越常规&#xff1a;深度定制Ant Design Vue组件样式 Ant Design Vue是一个基于Vue.js的UI设计语言&#xff0c;它提供了一套企业级的高质量React组件。尽管Ant Design Vue的组件已经非常完善&#xff0c;但在某些情况下&#xff0c;我们可能需要根据特定的设…

Shopee、Lazada测评,是找服务商呢?还是建议自己养号补单呢?

目前大部分Shopee、Lazada的卖家由于运营成本的增加&#xff0c;都会找服务商测评来打造权重&#xff0c;但是找服务商有很多不靠谱&#xff0c;建议还是自行精养一批号&#xff0c;账号在手里比较安全可控&#xff0c;随时随地可以送测&#xff0c;精准搜索关键词货比三家下单…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户&#xff0c;流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管&#xff0c;我们没一个人敢催。向副行长汇报情况&#xff0c;又跟客户说。客户跟他们…

Python风控建模实战案例数据库(50个实战数据集,上千万数据量)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;Python风控建模实战案例数据库 风险控制建模是指利用数据和分析方法来识别、评估和管理金融风险的过程。在金融领域&#xff0c;风险控制建模通常涉及建立数学模型&#xff0c;用于评估借款人、投资组合、…

git 命令 远程分支B合并到本地自己的分支A

场景说明&#xff1a;每个同事都有自己的开发分支&#xff0c;开发完统一汇总到 dev 分支 我&#xff1a;本地开发分支A&#xff0c;正在开发&#xff0c; 同事&#xff1a;远程分支B开发完&#xff0c;提交了代码在他的分支&#xff0c; 现在需要将同事B分支的代码合并到本地的…

【Android】android studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感&#xff5e; 点赞收藏关注 支持一下吧&#xff5e; 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理&#xff1a;2.2 登录/注册模块2.3 功能界面初始化&#xff1a;2.4 图书管理模块2.5 图书租借服务2.6 读…

Java25年还有更多的工作岗位适合二本学生就业吗?

Java作为一种广泛使用的编程语言。尽管技术领域不断发展和变化&#xff0c;Java依然在许多行业中占据重要地位。以下是一些原因&#xff0c;刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区…

基于Java的软件测试管理系统【附源码】

毕业&#xff08;设计&#xff09;论文 题 目&#xff1a; 软件测试管理系统 学 号&#xff1a; 姓 名&#xff1a; 院 部&#xff1a; 专 业&#xff1a; 班 级&#xff1a; 指导教师&#xff1a; 职 称&#xff1a; 完成日期&#xff1a; 年 月 日 摘要 随着信息技术的不断…

[leetcode]insert-into-a-binary-search-tree

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if (root nullptr) {return new TreeNode(val);}TreeNode* pos root;while (pos ! nullptr) {if (val < pos->val) {if (pos->left nullptr…

如何从0构建一款类jest工具

Jest工作原理 Jest 是一个流行的 JavaScript 测试框架&#xff0c;特别适用于 React 项目&#xff0c;但它也可以用来测试任何 JavaScript 代码。Jest 能够执行用 JavaScript 编写的测试文件的原因在于其设计和内部工作原理。下面是 Jest 的工作原理及其内部机制的详细解释&…

NetSuite Account Merge 科目合并功能分析

最近项目中&#xff0c;客户有提到过能否将不用的Account与新建的Account进行合并&#xff0c;即我们所说的Merge功能&#xff5e;可以&#xff0c;但是该功能有使用的限制&#xff0c;比如最直接的一点需要注意&#xff0c;不同类型的Account是不可以使用Merge功能的&#xff…

汽车软件开发者的必修课:ASPICE 4.0主要特点、优势及与之前版本的变化之处

ASPICE&#xff08;汽车SPICE&#xff09;4.0是专为汽车行业量身定制的过程评估模型&#xff0c;旨在确保软件和系统开发过程的质量和可靠性。它是更广泛的 ISO/IEC 330xx 系列标准的一部分&#xff0c;源自通用 SPICE&#xff08;软件流程改进和能力确定&#xff09;框架。 AS…

Kylin有哪些功能特点

Apache Kylin 是一款开源的、分布式的分析数据仓库&#xff0c;它提供 Hadoop/Spark 之上的 SQL 接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据。Kylin 的功能特点主要体现在以下几个方面&#xff1a; 1. SQL接口与多维分析&#xff08;OLAP&#xff09;…

批归一化(Batch Normalization)和层归一化(Layer Normalization)的作用

在深度学习领域&#xff0c;归一化技术被广泛用于加速神经网络的训练速度并提高其稳定性。本文将介绍两种常见的归一化方法&#xff1a;批归一化&#xff08;Batch Normalization, BN&#xff09;和层归一化&#xff08;Layer Normalization, LN&#xff09;&#xff0c;并通过…