句柄数是什么
答案:1 悬赏:0 手机版
解决时间 2021-03-09 01:05
- 提问者网友:送舟行
- 2021-03-08 14:41
句柄数是什么
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-03-08 14:57
问题一:什么叫句柄数?多少是正常的? 句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
通俗一点讲:就是像人的身份证号。
这个多少算正常?那要看你开机运行多少软件了!刚买来的电脑最多才几千。然后电脑里东西多了就爬上去了。有的几千万。。。这样你的电脑就比蜗牛还慢了。。。当然这样情况下是中毒了。。。嘿嘿嘿嘿嘿!!问题二:linux 查看句柄数使用多少 ---查看系统默认的最大文件句柄数,系统默认是1024
# ulimit -n
1024----查看当前进程打开了多少句柄数
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231 ........
其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名。
# ps aef|grep 24204
nginx 24204 24162 99 16:15 ? 00:24:25 /usr/local/nginx/sbin/nginx -sLinux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
# ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后.问题三:什么是句柄? 句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。
创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。问题四:CPU界面里的句柄数是什么意思? 句柄是一个标识符,是拿来标识对象或者项目的。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。问题五:什么叫句柄数?多少是正常的? 句柄是...
一个32位无符号整数,其原始定义好像是unsigned long(记不清了),使Windows用来标识一些系统使用的资源的(例如图标、窗口等等),如果觉得不好理解可以把它当作指针来使,而且事实上大部分时候就是把他当指针使的
回复:啥叫句柄?
对于初涉Windows编程的兄弟来说,句柄的确是个令人摸不找头脑的概念。
指针你应该知道吧,句柄起的作用和指针大体相同,比如用你用API函数建了个窗口,函数返回一个句柄,或者你调用一个API函数,这个函数要求你传入父窗口的句柄。第一个例子中以后你要放问那个窗口的任何东西,就只有靠这个句柄了,第二个例子也一样,函数需要通过父窗口的句柄进一步访问父窗口的资源,以进行对新建窗口的设置。
哪为什么不返回窗口在内存中的指针呢?让用户直接操作内存是十分危险的,有可能导致难以预料的错误,所以操作系统就在API函数一层隐去了过于接近底层的指针,而代之以32位无符号整数DWORD,它相似于一个索引,由操作系统通过这个索引查到窗口资源在内存中的真实位置进行操作,避免了许多不必要错误的发生。
是一个操作系统中线程和资源共享的问题,打个比方吧:
在cpu中某种资源最大是150,有4个线程:a;最大需求是75,当前需求是45,b:50,40, c:40,25,d有两种情况1,d;50,25。2,50,35。用那种方法才能使线程安全呢,看看总的剩余的资源是:v=150-45-40-25=40,先看第一种当前线程是25,那么还有v1=40-25=15的剩余资源,恰好能够用于c线程的剩余部分,而c线程又可以释放出先前25的资源,再看b剩余线程还需要10个资源数,我们就可以满足它,然后再依次地把所有的线程完成。再看第二种方法,当前线程需要资源35,那么只剩余40-35=5的资源了,不能满足任何一个线程的剩余线程要求的资源数,这就可能导致死锁问题,这个就不能使线程安全了
什么叫进程?进程同程序有什么区别?
A:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个
进程。显然,程序是死的(静态的),进程是活的(动态的)。
进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程
就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我
多讲了吧,所有由你启动的进程都是用户进程。
进程是操作系统进行资源分配的单位。在Windows
下,进程又被细化为线程,也就是一个进程下有多个能独立运行的
更小的单位。问题六:什么叫进程数、线程数、句柄数,它们之间有什么关系? 所谓句柄实际上是一个数据,是一个Long (整长型)的数据。
句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此设及到了如何共享内存, 如何通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。
线程,也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。
线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态......余下全文>>问题七:句柄数的命令 如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?问题八:linux 句柄数代表打开文件数吗 修改文件句柄数在Linux下,我们使用ulimit -n命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many filesopen”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
13124204
5724244
5724231
5624264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps -aef|grep 24204
mysql 2420424162 99 16:15? 00:24:25/usr/sbin/mysqld问题九:linux句柄数的问题 首先确定此java程序的PID,pidof java
然后去到/proc/`pidof java`/fd目录,wc胆-l看看打开的文件句柄数。问题十:易语言 句柄数不断增加 呵呵,好厉害 的东西啊,病毒没有彻底清除,而且还损伤了系统,重装吧
通俗一点讲:就是像人的身份证号。
这个多少算正常?那要看你开机运行多少软件了!刚买来的电脑最多才几千。然后电脑里东西多了就爬上去了。有的几千万。。。这样你的电脑就比蜗牛还慢了。。。当然这样情况下是中毒了。。。嘿嘿嘿嘿嘿!!问题二:linux 查看句柄数使用多少 ---查看系统默认的最大文件句柄数,系统默认是1024
# ulimit -n
1024----查看当前进程打开了多少句柄数
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231 ........
其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名。
# ps aef|grep 24204
nginx 24204 24162 99 16:15 ? 00:24:25 /usr/local/nginx/sbin/nginx -sLinux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
# ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后.问题三:什么是句柄? 句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。
创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。问题四:CPU界面里的句柄数是什么意思? 句柄是一个标识符,是拿来标识对象或者项目的。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。问题五:什么叫句柄数?多少是正常的? 句柄是...
一个32位无符号整数,其原始定义好像是unsigned long(记不清了),使Windows用来标识一些系统使用的资源的(例如图标、窗口等等),如果觉得不好理解可以把它当作指针来使,而且事实上大部分时候就是把他当指针使的
回复:啥叫句柄?
对于初涉Windows编程的兄弟来说,句柄的确是个令人摸不找头脑的概念。
指针你应该知道吧,句柄起的作用和指针大体相同,比如用你用API函数建了个窗口,函数返回一个句柄,或者你调用一个API函数,这个函数要求你传入父窗口的句柄。第一个例子中以后你要放问那个窗口的任何东西,就只有靠这个句柄了,第二个例子也一样,函数需要通过父窗口的句柄进一步访问父窗口的资源,以进行对新建窗口的设置。
哪为什么不返回窗口在内存中的指针呢?让用户直接操作内存是十分危险的,有可能导致难以预料的错误,所以操作系统就在API函数一层隐去了过于接近底层的指针,而代之以32位无符号整数DWORD,它相似于一个索引,由操作系统通过这个索引查到窗口资源在内存中的真实位置进行操作,避免了许多不必要错误的发生。
是一个操作系统中线程和资源共享的问题,打个比方吧:
在cpu中某种资源最大是150,有4个线程:a;最大需求是75,当前需求是45,b:50,40, c:40,25,d有两种情况1,d;50,25。2,50,35。用那种方法才能使线程安全呢,看看总的剩余的资源是:v=150-45-40-25=40,先看第一种当前线程是25,那么还有v1=40-25=15的剩余资源,恰好能够用于c线程的剩余部分,而c线程又可以释放出先前25的资源,再看b剩余线程还需要10个资源数,我们就可以满足它,然后再依次地把所有的线程完成。再看第二种方法,当前线程需要资源35,那么只剩余40-35=5的资源了,不能满足任何一个线程的剩余线程要求的资源数,这就可能导致死锁问题,这个就不能使线程安全了
什么叫进程?进程同程序有什么区别?
A:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个
进程。显然,程序是死的(静态的),进程是活的(动态的)。
进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程
就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我
多讲了吧,所有由你启动的进程都是用户进程。
进程是操作系统进行资源分配的单位。在Windows
下,进程又被细化为线程,也就是一个进程下有多个能独立运行的
更小的单位。问题六:什么叫进程数、线程数、句柄数,它们之间有什么关系? 所谓句柄实际上是一个数据,是一个Long (整长型)的数据。
句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此设及到了如何共享内存, 如何通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。
线程,也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。
线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态......余下全文>>问题七:句柄数的命令 如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?问题八:linux 句柄数代表打开文件数吗 修改文件句柄数在Linux下,我们使用ulimit -n命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many filesopen”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
13124204
5724244
5724231
5624264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps -aef|grep 24204
mysql 2420424162 99 16:15? 00:24:25/usr/sbin/mysqld问题九:linux句柄数的问题 首先确定此java程序的PID,pidof java
然后去到/proc/`pidof java`/fd目录,wc胆-l看看打开的文件句柄数。问题十:易语言 句柄数不断增加 呵呵,好厉害 的东西啊,病毒没有彻底清除,而且还损伤了系统,重装吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯