导航:首页 > 操作系统 > linux进程回收

linux进程回收

发布时间:2024-06-11 11:25:14

1. linux 进程回收线程资源指哪些资源

Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。
解决这个问题,有2种方式,系统自动释放线程资源,或者由另一个线程释放该线程资源。
注意,在这里,我认为进程运行后,本身,也是一个线程,主线程,主线程和主线程建立的线程共享进程资源。不同于其他线程,在于主线程运行结束后,程序退出,所有程序建立的线程也会退出。
系统自动释放
如果想在线程结束时,由系统释放线程资源,则需要设置线程属性为detach。
代码上,可以这样表示:
pthread_t t;
pthread_attr_t a; //线程属性
pthread_attr_init(&a); //初始化线程属性
pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED); //设置线程属性
::pthread_create( &t, &a, GetAndSaveAuthviewSDRStub, (void*)lp); //建立线程
其他线程释放
另一种方式,则是由另一个线程将该资源释放。
代码上,可以这样表示:
pthread_t t;
::pthread_create( NULL, NULL, GetAndSaveAuthviewSDRStub, (void*)lp);
::pthread_join( t);
::pthread_join( t)等待线程t退出,并释放t线程所占用的资源。当然,这里也有个同步的功能,使一个线程等待另一个线程退出,然后才继续运行。

linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。
若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。
unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己,如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。或者将线程置为joinable,然后适时调用pthread_join.
在程序运行中检查/proc/ <pid> /maps文件,若看到大概8K左右的很多虚拟内存碎片,基本上可以确认是线程资源泄漏造成的300个线程后pthread_create失败。

不知是否因为自己,先对要创建的线程做了以下属性设定,
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

然后又在线程函数中使用
pthread_detach(pthread_self());

两段代码作用有冲突。
===============================================================================
pthread_detach(threadid)和pthread_detach(pthread_self())的区别应该是调用他们的线程不同,没其他区别。

pthread_detach(threadid)函数的功能是使线程ID为threadid的线程处于分离状态,一旦线程处于分离状态,该线程终止时底层资源立即被回收;否则终止子线程的状态会一直保存(占用系统资源)直到主线程调用pthread_join(threadid,NULL)获取线程的退出状态。
通常是主线程使用pthread_create()创建子线程以后,一般可以调用pthread_detach(threadid)分离刚刚创建的子线程,这里的threadid是指子线程的threadid;如此以来,该子线程止时底层资源立即被回收;
被创建的子线程也可以自己分离自己,子线程调用pthread_detach(pthread_self())就是分离自己,因为pthread_self()这个函数返回的就是自己本身的线程ID。

2. linux内存回收的三种方式

1. 快速内存回收:处于get_page_from_freelist()函数中,在遍历zonelist过程中,对每个zone都在分配前进行判断,如果分配后zone的空闲内存数量 < 阀值 + 保留页框数量,那么此zone就会进行快速内存回收。其中阀值可能是min/low/high的任何一种,因为在快速内存分配,慢速内存分配和oom分配过程中如果回收的页框足够,都会调用到get_page_from_freelist()函数,所以快速内存回收不仅仅发生在快速内存分配中,在慢速内存分配过程中也会发生。
2. 直接内存回收:处于慢速分配过程中,直接内存回收只有一种情况下会使用,在慢速分配中无法从zonelist的所有zone中以min阀值分配页框,并且进行异步内存压缩后,还是无法分配到页框的时候,就对zonelist中的所有zone进行一次直接内存回收。注意,直接内存回收是针对zonelist中的所有zone的,它并不像快速内存回收和kswapd内存回收,只会对zonelist中空闲页框不达标的zone进行内存回收。在直接内存回收中,有可能唤醒flush内核线程。
3. kswapd内存回收:发生在kswapd内核线程中,每个node有一个swapd内核线程,也就是kswapd内核线程中的内存回收,是只针对所在node的,并且只会对分配了order页框数量后空闲页框数量 < 此zone的high阀值 + 保留页框数量的zone进行内存回收,并不会对此node的所有zone进行内存回收。

3. linux𨱒姝昏繘绋嫔懡浠killlinux𨱒姝昏繘绋

linuxkill𨱒涓嶆帀杩涚▼锛

linux杩涚▼kill涓嶆帀

涓鏄杩涚▼宸茬粡鎴愪负镀垫昏繘绋,褰揿畠镄勭埗杩涚▼灏嗗畠锲炴敹鎴栧皢瀹幂殑鐖惰繘绋媖ill鎺夊嵆鍙鍦╬s杈揿嚭鐪嬩笉鍒颁简;

浜屾槸杩涚▼姝e勫湪鍐呮牳鐘舵佷腑,Linux杩涚▼杩愯屾椂鍒嗗唴镙稿拰鐢ㄦ埛涓ょ岖姸镐,褰撹繘绋嬭繘鍏ュ唴镙哥姸镐佸悗,浼氩睆钄芥墍链変俊鍙,鍖呮嫭SIGKIL,镓浠ヨ繖涓镞跺檏ill-9涔熷彉寰楁棤鏁堜简銆

濡备綍kill𨱒鎺塴inux绯荤粺涓镄勫兊灏竏efunct杩涚▼锛

镓惧埌璇defunct镀靛案杩涚▼镄勭埗杩涚▼锛屽皢璇ヨ繘绋嬬殑鐖惰繘绋嬫潃鎺夛纴鍒欐defunct杩涚▼灏呜嚜锷ㄦ秷澶

linux濡备綍镆ヨ繘绋嬶纴𨱒杩涚▼锛岄吨钖杩涚▼锛

镆ユ垒杩涚▼ps-ef|grep-vgrep|grep"XXXXX"𨱒杩涚▼kill-9`ps-ef|grep-vgrep|grepXXXXX|awk'{print$2}'`閲嶈捣serviceXXXXrestart

濡备綍𨱒鎺茔inux涓镄勫兊灏歌繘绋嬶纻

1銆佷娇鐢╰op锻戒护灏卞彲浠ユ煡鐪嫔埌镀靛案杩涚▼銆

2銆佹煡鐪嫔叿浣撹繘绋媝id#ps-A-ostat,ppid,pid,cmd|grep-e"^"璇存槑锛氢笉鏄镆ヤ笉鍑哄兊灏歌繘绋嬶纴鏄锲犱负鎴戦吨钖浜嗙郴缁燂纴娌℃湁镀靛案杩涚▼銆

3銆佹潃姝诲兊灏歌繘绋#kill-9pid鍙

4. Linux到底有没有回收站

linux下的回收站在每一个当前用户目录./local/share/Trash中。
也可以给linux添加一个回收站。
mkdir /tmp/trash_tmp 建立一个回收站目录
vi /bin/trash 编辑一个文件
mv $@ /tmp/trash_tmp
:wq 保存退出
alias rm=/bin/trash添加别名
vi /etc/bashrc
在最后一行添加alias rm=/bin/trash
chmod 755 /bin/trash
chmod 777 /tmp/trash_tmp
source /etc/bashrc 启用环境变量
如果要真的删除某个文件的时候用 /bin/rm -i file_name
这样一来一个回收站就建立了,以后用rm的时候会自动的将file_name 移动到/tmp/trash_tmp/目录下

5. 在Linux编程中,父进程为什么要等待并回收子进程的退出状态不这样做会有什么后果

分几种情况:

  1. 父进程永不退出:这种情况下若子进程退出,而父进程没有收集子进程的退出状态,则此子进程会变为僵尸进程,一直占用少量资源,有危害;

  2. 父进程比子进程先退出:这种情况下父进程退出时,仍在运行的子进程会变为孤儿进程,孤儿进程会被托管给init进程,孤儿进程结束时由init进程负责回收;

  3. 父进程比子进程晚退出:子进程先退出时会变为僵尸进程,占用少量资源;待到父进程再退出时,子进程由僵尸进程变为孤儿进程,init进程会回收这些已僵死的孤儿进程,则这些已经僵死的孤儿进程就能瞑目而去了;

6. linux鍐呭瓨锲炴敹镄勪笁绉嶆柟寮弆inux鍐呭瓨锲炴敹

linux瀹炵幇涓诲瓨绌洪棿镄勫垎閰崭笌锲炴敹锛

Linux绯荤粺阃氲繃锻戒护malloc鍜宖ree𨱒ュ垎閰嶅拰閲婃斁涓诲瓨绌洪棿銆

Linux鐢ㄦ埛杩涚▼鏄濡备綍閲婃斁鍐呭瓨镄勶纻

濡傛灉鍐呭瓨澶燂纴杩涚▼涓嶅幓涓诲姩锲炴敹锛屽唴瀛樻槸涓崭细閲婃斁镄凩inux绯荤粺镄勭紦瀛樻満鍒舵槸鐩稿綋鍏堣繘镄勶纴浠栦细阍埚筪entry锛堢敤浜嵘FS锛屽姞阃熸枃浠惰矾寰勫悕鍒癷node镄勮浆鎹锛夈丅ufferCache锛堥拡瀵圭佺洏鍧楃殑璇诲啓锛夊拰PageCache锛堥拡瀵规枃浠籼node镄勮诲啓锛夎繘琛岀紦瀛樻搷浣溿

浣嗘槸鍦ㄨ繘琛屼简澶ч噺鏂囦欢镎崭綔涔嫔悗锛岀紦瀛树细鎶婂唴瀛樿祫婧愬熀链鐢ㄥ厜銆备絾瀹为檯涓婃垜浠鏂囦欢镎崭綔宸茬粡瀹屾垚锛岃繖閮ㄥ垎缂揿瓨宸茬粡鐢ㄤ笉鍒颁简銆

linux涓璳helper杩涚▼鏄浠涔堬纻

1.khelper鏄灞炰簬鍐呮牳甯锷╄繘绋

2.涓嬮溃鏄痩inux甯歌佽繘绋嬬殑浠嬬粛鍒楄〃

鍐呮牳绾跨▼绠$悊

鐢ㄤ簬杩涚▼鍦ㄤ笉钖岀殑CPU闂磋縼绉

鍐呮牳璋冨害/绠$悊绗0涓狢PU杞涓鏂镄勫畧鎶よ繘绋

绠$悊澶氭牳蹇

鍐呮牳璋冨害/绠$悊绗1涓狢PU杞涓鏂镄勫畧鎶よ繘绋

澶勭悊鍐呮牳浜嬩欢瀹堟姢杩涚▼

澶勭悊鍐呮牳浜嬩欢瀹堟姢杩涚▼

鍦ㄦ疮涓澶勭悊鍣ㄤ笂鍗旷嫭杩愯岃繘绋嬶纴阃氲繃鏂囦欢绯荤粺瀹炵幇

鍐呮牳甯锷╄繘绋

缃戠粶浠跨湡鍣锛屾ā𨰾熺绣缁灭幆澧

寮傛ュ姞瀵嗙$悊杩涚▼

鍖呯$悊

鐗规潈钖屾ワ纴灏嗙紦鍐插尯鏂囦欢寮哄埗鍐椤叆纭鐩

JTAG璋冭瘯鍣ㄩ粯璁よ繘绋

鍐呮牳瀹屾暣镐ф镆

鍐呮牳瀹屾暣镐ф镆

绠$悊纾佺洏鍧楄诲啓

绠$悊纾佺洏鍧楄诲啓

楂樼骇閰岖疆鍜岀数婧愮$悊鎺ュ彛

acpi杩涚▼镄勯氱煡杩涚▼

acpi鐑鎻掓嫈绠$悊

ATA纭鐩樻帴鍙g$悊

ATA纭鐩樻帴鍙g$悊

ATA纭鐩樻帴鍙g$悊

鍐呮牳镄剈sbhub

鍐呮牳绾跨▼

鍐呭瓨锲炴敹锛岀‘淇濈郴缁熺┖闂茬墿鐞嗗唴瀛樼殑鏁伴噺鍦ㄤ竴涓钖堥傜殑锣冨洿

浣滀负鍐呮牳涓镄勫畧鎶よ繘绋嫔瓨鍦锛屽畠瀹氭湡镓ц岄〉闱㈡壂鎻忥纴璇嗗埆鍓链椤甸溃骞跺悎骞跺坛链锛岄喷鏀捐繖浜涢〉闱浠ヤ緵瀹幂敤

浠f浛鐢ㄦ埛杩涚▼绠$悊io

浠f浛鐢ㄦ埛杩涚▼绠$悊io

锷犲瘑绯荤粺

鎻愪緵锷犲瘑瑙e瘑鐩稿叧鍑芥暟

鎻愪緵锷犲瘑瑙e瘑鐩稿叧鍑芥暟

scsi璁惧

scsi璁惧

scsi璁惧

scsi璁惧

鍐呮牳榧犳爣鏀鎸

Ext3鏂囦欢绯荤粺镄勬棩蹇楃$悊

Ext3鏂囦欢绯荤粺镄勬棩蹇楃$悊

閲婃斁瀛桦偍鍦ㄧ紦瀛桦尯涓镄勬暟鎹

閲婃斁瀛桦偍鍦ㄧ紦瀛桦尯涓镄勬暟鎹

3.甯屾湜瀵逛綘链夋墍鏀惰幏銆

阅读全文

与linux进程回收相关的资料

热点内容
疫情命令照片 浏览:95
画世界的app叫什么 浏览:824
vc6编译时显示无法执行 浏览:547
java动态初始化数组 浏览:638
概率论与数理统计答案pdf 浏览:681
得物app上面的鞋为什么这么贵 浏览:909
如何从爱思服务器注销游戏账号 浏览:944
幼儿编程教育培训多少钱 浏览:406
经常生气有什么东西能解压 浏览:903
代理服务器地址和端口可以怎么填 浏览:65
unity5手游编译模型 浏览:268
安卓无人机app源码 浏览:811
pl1编程语言 浏览:801
台达plc编程换算指令大全 浏览:176
手机上的编程游戏 浏览:110
服务器密码机有什么用 浏览:479
dos磁盘命令 浏览:957
单片机cpu52的功能 浏览:693
opc服务器怎么开发 浏览:375
觅喜是个什么app 浏览:405