用c语言统计进程打开文件句柄(查看进程文件句柄数)

本篇文章给大家谈谈用c语言统计进程打开文件句柄,以及查看进程文件句柄数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、如何查看LINUX单进程能够打开的最大文件句柄数2、c语言如何获得当前运行的控制台程序的句柄3、用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数4、C语言中如何获得当前进程句柄,谢谢!5、文件句柄统计

如何查看LINUX单进程能够打开的最大文件句柄数

在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。

对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有 点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:

lsof -n |awk ‘{print $2}’|sort|uniq -c |sort -nr|more

在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:

# lsof -n|awk ‘{print $2}’|sort|uniq -c |sort -nr|more

131 24204

57 24244

57 24231

56 24264

其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。

ps -aef |grep 24204

mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld

哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。

但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:

ulimit -HSn 4096

以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄 数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。

c语言如何获得当前运行的控制台程序的句柄

句柄(HANDLE)是WINDOWS环境下特有的窗口程序运行的识别号,而C语言是DOS环境下运行的代码,在DOS环境下,没有句柄的概念,理论上说,新时期环境下的新产物,不可能在旧环境下找到,就像要求达尔文用电子邮件给出版社发送文稿一样荒诞不经,即使在控制台上运行的C程序可以通过WINDOWS任务管理器看到PID,但每次运行都不相同,那么有如何使用呢?

用c语言统计进程打开文件句柄(查看进程文件句柄数)

用VC++编写程序,像任务管理器那样获得某个进程的句柄数,和线程数

VC 获取进程线程数

#include tlhelp32.h

void EnumProcess(void)

{

HANDLE hProcessSnap;

HANDLE hProcess;

PROCESSENTRY32 pe32;

DWORD dwPriorityClass;

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)

{

return;

}

pe32.dwSize = sizeof(PROCESSENTRY32);

if (!Process32First(hProcessSnap, pe32))

{

CloseHandle(hProcessSnap);

return;

}

do

{

//printf(“%s”, pe32.szExeFile); //完整文件名

//printf(“%d”, (int)pe32.cntThreads);//线程数

}while(Process32Next(hProcessSnap, pe32));

CloseHandle(hProcessSnap);

}

如果要获取进程句柄

HANDLE hProcessHandle;

hProcessHandle = OpenProcess(0x1F0FFF, true, ProcessID);//ProcessID进程ID

这个在控制台,Win32 SDK ,MFC 都可以用的,只不过

SDK ,MFC 输出就 不用 printf 了,只要把获取的内容赋给变量就行了

C语言中如何获得当前进程句柄,谢谢!

DWORD PID;

PID = GetProcessPID(L”test.exe”);

//获取进程pid函数

DWORD GetProcessPID(LPCTSTR pName)

{

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (INVALID_HANDLE_VALUE == hSnapshot) {

return NULL;

}

PROCESSENTRY32 pe = { sizeof(pe) };

BOOL fOk;

for (fOk = Process32First(hSnapshot, pe); fOk; fOk = Process32Next(hSnapshot, pe)){

if (!_tcsicmp(pe.szExeFile, pName)) {

CloseHandle(hSnapshot);

return pe.th32ProcessID;

}

}

return NULL;

}

//由进程pid获取进程句柄,置顶

HWND hh = GetProcessTopWindows(PID);

HWND GetProcessTopWindows(DWORD dwPID){

count = 0;

EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);

if(count 0) {

//cout “窗口句柄是:” nhWnd[count -1] endl;//输出句柄,可用spy++工具核对

return (nhWnd[count -1]);

}

return NULL;

}

别忘了添加对应头文件。

文件句柄统计

# 统计指定用户指定进程号打开的文件句柄数

# lsof -u root -p 123|wc -l

# 输出所有打开的文件句柄信息

# lsof -u root socket.log.2021080918

time_suffix=`date +”%Y%m%d%H%M”`

# 输出所有打开的文件句柄信息

lsof -u root socket.log.$time_suffix

# 输出进程号

cat socket.log.$time_suffix|awk -F’ admin’ ‘{print $1}’|awk -F’python’ ‘{print $2}’ pid.log.$time_suffix

# 去除空格

sed -i “s/ //g” pid.log.$time_suffix

# 统计打开文件数最多的进程号

cat pid.log.$time_suffix |awk ‘BEGIN{FS=”\n”}{for(i=1;i=NF;i++){a[$i]++}}END{for(i in a){print i,a[i]}}’ |sort -n -t ” ” -k 2 -r|head -n 10

用c语言统计进程打开文件句柄的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于查看进程文件句柄数、用c语言统计进程打开文件句柄的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月31日 01:56:57
下一篇 2024年3月31日 02:08:14

相关推荐

  • linux给文件写权限,linux怎么给文件权限

    linux宝塔写入权限不足 1、可以使用chmod命令修改权限。语法:chmod [-cfvR] [–help] [–version] mode file…说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 2、通过更改文件权限可以使用c…

    2024年5月23日
    5100
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4900
  • c语言多文件调用,c语言多文件操作

    c语言一个结构体如何在多个源文件里面调用? 在这种方法中,可以先将多个源文件分别编译成目标文件,然后再将它们链接成一个可执行文件。 在头文件里定义结构,例如:typedef struct { int a, b;} S;S s_instance;在其他文件里引用就可以。 创建程序入口点main函数,在main函数中条用其它函数。达到同时运行的母的。如果不这样,…

    2024年5月23日
    4200
  • linux.o生成,linux 生成core文件

    linux下多个.o文件如何链接生成可执行程序 你好!很简单,使用-o选项就可以了。如果有a.o,b.o,c.o,d.o4个.o文件,则使用以下命令:gcc -o (生成的目标名称)test a.o b.o c.o d.o 希望对你有所帮助,望采纳。 连接成可执行文件了:gcc hello.c -o h 这时,你的当前目录下就多出了一个叫 h 的文件,它就是…

    2024年5月23日
    4200
  • linux下软件追踪工具,linux追踪进程

    Linux下有没有像everything一样快速搜索文件的工具 1、QuickSearch(快速搜索)感觉跟Everything一样,非常快,一安装好就可以搜索文件。里面的网页搜索可以设置关闭的。 2、Linux下可以直接使用find命令来快速搜索文件,格式为:“find [查找路径] 寻找条件 操作”。 3、Linux下查找文件可以用whereis、loc…

    2024年5月23日
    4500
  • 为linux命令做链接gcc,linux cp 链接文件

    linux系统中gcc的命令怎么用? 1、linux系统常用操作命令linux系统常用操作命令如下:ls:全拼list,功能是列出目录的内容及其内容属性信息。cd:全拼change directory,功能是从当前工作目录切换到指定的工作目录。cp:全拼copy,其功能为复制文件或目录。 2、linux系统常用操作命令如下:ls:全拼list,功能是列出目录…

    2024年5月23日
    4200
  • java将文件转换为二进制,java将文件转成二进制

    Java中如何把图片转换成二进制流 1、所以定义的数组长度为10240,也就是10kb吧,当然你也可以定义小点,然後分次读。反正二进制都在这个数组里面,最後两句我只是举了个例子教你怎麼看这个二进制,第一个是现实二进制对应的整数,第二个是显示二进制了。 2、//执行 g.dispose(); //输出图片结果 saveImage(image); }我能够输出绘…

    2024年5月23日
    4100
  • java读取文件内容乱码,java读取文件编码格式

    java中filewriter中文乱码怎么解决? 1、如果你期望写到文件中的汉字是 GBK编码,可以写文件时,将字符串准换成 GBK编码的byte[]。网页编码和输出流编码一致。 2、读取文件的时候如果是用的read方法(字节流),碰到中文输出就是乱码,然后存储的时候设置下编码为GBK或者是UTF-8形式即可,可以有效的解决乱码问题。 3、只是个别文件出现了…

    2024年5月23日
    4700
  • java写property文件,java写入properties

    javaweb怎样在classpath建立一个property配置文件 1、一般在scr下面新建一个属性文件*.properties,如a.properties 然后在Java程序中读取或操作这个属性文件。 2、在我的电脑界面,鼠标右键点击“此电脑”。在弹出的列表中,点击最下方的“属性”。在跳转到的界面中,点击“高级系统设置”。在弹出的系统属性界面,点击右下…

    2024年5月23日
    4600
  • excel文件多人同时编辑,excel文件怎么多人编辑

    多人编辑同一个excel怎么弄 1、点击审阅 打开Excel表格,点击界面上方的审阅。共享工作簿 点击界面右上方的共享工作簿。勾选同时编辑 勾选允许多用户同时编辑,点击下面的确定。 2、打开需要进行协同编辑的Excel表格,在菜单栏中找到【特色应用】选项。单击【特色应用】项下的【在线协作】功能。弹出一个上传文档的窗口,需等待文件上传成功后进行下一步操作。 3…

    2024年5月23日
    3800

发表回复

登录后才能评论



关注微信