句柄?指针?以及相关的基础知识(查看进程、利用句柄关闭窗口)

一:基础内容

1 什么是句柄

在程序设计中,句柄(handle)是Windows操作系统用来标识被应用程序所创建或使用的对象的整数。其本质相当于带有引用计数的智能指针。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,可以使用句柄。

个人理解:句柄相当于一个特别的指针,同指针一样,都是用来指示另一个变量所在的位置,但是句柄相当于指针的plus版本,句柄自带引用计数,可以显示出自己指向的位置。

2 句柄与指针的区别

指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。(类似于封装)。通俗的说就是我们调用句柄就是调用句柄所提供的服务,即句柄已经把它能做的操作都设定好了,我们只能在句柄所提供的操作范围内进行操作,但是普通指针的操作却多种多样,不受限制。–WKI

AlvinCR理解:指针直接指向原汁原味的内存地址,而句柄则是指向被处理过的地址。使用句柄进行操作相当于通过傀儡进行操作,调用文件的时候,不是自己亲自动手,而是需要通过傀儡之手进行,也就是一个中介。指针相当于放养型的导师,虽然能使用各种资源,但是所有事情都需要自己亲自处理;句柄相当于小学老师,虽然大部分事情都帮你解决好,但是也因此丧失了自主权。

二:Linux中的句柄

1 查看线程占用句柄数

[root@alvincr ~]# ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 5844

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes (-u) 5844

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

2 查看进程ID

Ps -ef

为了安全起见,更换另一台VPS查看后台进程,请不要在重要VPS上执行关闭命令,以免出现错误。

如果知道进程的名称,还可以直接使用 ps -ef | grep name (这里的name就是进程的名称),从下图可以看出https所占用的PID为15580

3 关闭进程

https://blog.csdn.net/lechengyuyuan/article/details/16337233

3.1 kill命令

PID为进程识别号,详细内容看附录。

使用kill -PID (这里的PID是指通过ps -ef得到的进程编号)

标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。

kill -l PID

-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功–或许仍然需要先手工杀死子进程,然后再杀死父进程。

3.2 killall命令

killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。

附:

ulimit命令

ulimit用于查看shell进程占用的资源.

如图,ulimit主要参数:

-H 设置硬资源限制.

-S 设置软资源限制.

-a 显示当前所有的资源限制.

-c size:设置core文件的最大值.单位:blocks

-d size:设置数据段的最大值.单位:kbytes

-f size:设置创建文件的最大值.单位:blocks

PS命令

更多Linux指令:https://alvincr.com/2020/05/linux%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%95%B4%E7%90%86/

PS是Process Status的缩写,用于列出系统中当前正在运行的进程。使用此命令来确定哪些进程正在运行以及正在运行的状态,该进程是否结束,该进程是否已死,哪些进程占用了太多资源,等等。

ps -aux | grep “test.sh” #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。

在这里插入图片描述

PID和PPID

PID(Process Identification,即进程识别号)是程序被操作系统加载到内存成为进程后动态分配的资源。每次程序执行的时候,操作系统都会重新加载,PID在每次加载的时候都是不同的。PID是唯一的,一个PID只标识一个进程。–wiki

PPID则是父进程ID,即parent PID。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值