A. linux下如何强制中断一个程序的执行(利用按键,而不是kill命令)
Linux下强制中断一个程序的执行使用键盘按键可以有多种方法。
1、CTRL+C键,这相当于发送Terminal信息到当前的程序。比如下图,在通过find命令查找名称带3b76的文件,可以直接按ctrl+c键结束掉循环。
B. linux涓鏂绋嫔簭鎸囦护linux涓鏂绋嫔簭
linux濡备綍寮哄埗涓鏂锛
llinux寮哄埗涓鏂镄勫懡浠ゆ湁浠ヤ笅涓や釜锛
linux锅沧㈠懡浠ゆ柟娉曚竴
缁堟㈠綋鍓嶆e湪镓ц岀殑镆愪釜锻戒护链蹇镄勬柟娉曟槸鎸変笅缁勫悎阌钬淐trl+C钬濄傝繖涓鏂规硶鍙链夊湪鐢ㄦ埛鑳藉熶粠镆愪釜铏氭嫙鎺у埗鍙颁笂鎺у埗杩欎釜绋嫔簭镄勬椂鍊欐墠濂忔晥銆
linux锅沧㈠懡浠ゆ柟娉曚簩
缁堟㈡煇涓鍑洪敊绋嫔簭镄勫彟澶栦竴涓锷炴硶鏄痥ill(𨱒)鎺夊畠镄勮繘绋嬨傝锋寜镦т笅闱㈢殑鏂规硶杩涜屾搷浣滐细
1)杈揿叆钬减s钬濆懡浠よ幏鍙栬繘绋嬬殑PID锛岃繖涓锻戒护瑕佹眰浣犳槸杩愯岃繖涓绋嫔簭镄勯偅涓浜烘垨钥呮槸镙圭敤鎴枫傚傛灉鏄镙圭敤鎴凤纴璇疯緭鍏モ减s-aux钬濆懡浠ゆ煡鐪嬫墍链夌殑杩涚▼锛屼笉绠℃槸璋佹嫢链夊畠浠镄勚
2)鍦ㄦ竻鍗曚腑镓惧埌杩欎釜鍑洪敊杩涚▼銆傚洜涓虹▼搴忕殑钖岖О鍒楀湪娓呭崟镄勬渶鍙宠竟锛岄氩父涓鐪煎氨鍙浠ユ垒鍒板畠銆
3)璇疯颁笅ps锻戒护杈揿嚭娓呭崟涓杩涚▼鐘舵佽屾渶宸﹁竟镄処D鏁板瓧銆
4)杈揿叆钬渒illID钬濓纴缁堟㈣ヨ繘绋嬨
linux鍝涓椹卞姩澶勭悊绯荤粺涓鏂锛
涓嶭inux璁惧囬┍锷ㄤ腑涓鏂澶勭悊鐩稿叧镄勯栧厛鏄鐢宠蜂笌閲婃斁IRQ镄𪞝PIrequest_irq()鍜宖ree_irq()锛宺equest_irq()镄勫师鍨嬩负锛歩ntrequest_irq(unsignedintirq,void(*handler)(intirq,void*dev_id,structpt_regs*regs),unsignedlongirqflags,constchar*devname,void*dev_id);irq鏄瑕佺敌璇风殑纭浠朵腑鏂鍙凤绂handler鏄钖戠郴缁熺橱璁扮殑涓鏂澶勭悊鍑芥暟锛屾槸涓涓锲炶皟鍑芥暟锛屼腑鏂鍙戠敓镞讹纴绯荤粺璋幂敤杩欎釜鍑芥暟锛宒ev_id鍙傛暟灏呜浼犻掞绂irqflags鏄涓鏂澶勭悊镄勫睘镐э纴鑻ヨ剧疆SA_INTERRUPT锛屾爣鏄庝腑鏂澶勭悊绋嫔簭鏄蹇阃熷勭悊绋嫔簭锛屽揩阃熷勭悊绋嫔簭琚璋幂敤镞跺睆钄芥墍链変腑鏂锛屾参阃熷勭悊绋嫔簭涓嶅睆钄斤绂鑻ヨ剧疆SA_SHIRQ锛屽垯澶氢釜璁惧囧叡浜涓鏂锛宒ev_id鍦ㄤ腑鏂鍏变韩镞朵细鐢ㄥ埌锛屼竴鑸璁剧疆涓鸿繖涓璁惧囩殑device缁撴瀯链韬鎴栬匩ULL銆
linux涓鏂链哄埗涓昏佹濇兂锛
Linux灏嗕腑鏂澶勭悊杩囩▼鍒嗘垚浜嗕袱涓阒舵碉纴涔熷氨鏄涓婂崐閮ㄥ拰涓嫔崐閮ㄣ备笂鍗婇儴鐢ㄦ潵蹇阃熷勭悊涓鏂锛屽畠鍦ㄤ腑鏂绂佹㈡ā寮忎笅杩愯岋纴涓昏佸勭悊璺熺‖浠剁揣瀵嗙浉鍏崇殑鎴栨椂闂存晱镒熺殑宸ヤ綔銆备篃灏辨槸鎴戜滑甯歌寸殑纭涓鏂锛岀壒镣规槸蹇阃熸墽琛屻备笅鍗婇儴鐢ㄦ潵寤惰繜澶勭悊涓婂崐閮ㄦ湭瀹屾垚镄勫伐浣滐纴阃氩父浠ュ唴镙哥嚎绋嬬殑鏂瑰纺杩愯屻备篃灏辨槸鎴戜滑甯歌寸殑杞涓鏂锛岀壒镣规槸寤惰繜镓ц屻
Linux涓链夌‖浠朵腑鏂鍜岃蒋浠朵腑鏂銆备絾鏄瀵逛簬纭浠朵腑鏂镄勫勭悊链変袱涓铡熷垯锛氢笉鑳藉祵濂楋纴瓒婂揩瓒婂ソ銆傦纸镞╄捣Linux鐗堟湰鏄鏀鎸佷腑鏂宓屽楋级
褰揂RM澶勭悊鍣ㄦ敹鍒颁腑鏂镄勬椂鍊欙纴瀹冭繘鍏ヤ腑鏂妯″纺锛屽悓镞禔RM澶勭悊鍣ㄧ殑CPSR瀵勫瓨鍣ㄧ殑IRQ浣崭细琚纭浠惰剧疆涓哄睆钄绌RQ銆
linux涓鏂锻戒护锛
Tab銆
杩欐槸浣犱笉鑳芥病链夌殑Linux蹇鎹锋柟寮忋傚畠灏嗕负鎭ㄨ妭鐪丩inux锻戒护琛屼腑镄勫ぇ閲忔椂闂淬
鍙闇杈揿叆锻戒护銆佹枃浠跺悕銆佺洰褰曞悕鐢氲呖锻戒护阃夐”锛岀劧钖庡崟鍑籘ab阌锛屽畠浼氲嚜锷ㄥ畬鎴愭偍杈揿叆镄勫唴瀹癸纴鎴栬呬细鏄剧ず镓链夊彲鑳界殑缁撴灉銆
Ctrl+C銆
杩欎釜缁勫悎鑳藉湪缁堢涓娄腑鏂锻戒护鎴栬繘绋嬨傛寜涓嫔畠灏嗙珛鍗冲仠姝㈡e湪杩愯岀殑绋嫔簭銆
鍦╨inux涓濡备綍缁堟㈡寚浠ょ殑杩愯岋纻
1銆侀栧厛镓揿紑linux缁堢锛岃繍琛屼竴娈礟ython绋嫔簭锛
2銆佺劧钖庡湪绋嫔簭杩愯屼腑锛岄渶瑕佺粓姝㈢▼搴忚繍琛屾椂锛屾寜涓嫔揩鎹烽敭crtl锛媍灏卞彲浠ョ粓姝㈡寚浠ょ▼搴忥纴姝ゆ椂杩愯岀殑杩欐祊ython绋嫔簭灏辫缁堟浜嗐傛墍链夌殑鎸囦护閮藉彲浠ョ敤杩欎釜蹇鎹烽敭缁堟㈣繍琛岋细
3銆佹渶钖庡啀娆¤繍琛屼竴涓嫔垰镓岖殑绋嫔簭锛岃繖閲岀洿鎺ヤ娇鐢–trl+Z蹇鎹烽敭缁堟㈣繍琛岀▼搴忔槸鍙浠ヨ揪鍒板悓镙风殑鏁堟灉镄勶细
C. linux支持中断嵌套吗
中断嵌套, 对于不同的中断是可以自由嵌套的,而对于同种类型的中断,是不可以嵌套执行的。
以下简单解释一下如何利用状态标志来防止同种类型中断的重入:
当某种类型的中断第一次发生时,首先其idt表项的状态位上被赋予IRQ_PENDING标志,表示有待处理。 然后将中断处理函数action置为null,然后由于其状态没有IRQ_INPROGRESS标志(第一次),故将其状态置上IRQ_INPROGRESS并去处IRQ_PENDING标志,同时将action赋予相应的中断处理函数指针(这里是一个重点,linux很巧妙的用法,随后说明)。这样,后面就可以顺利执行handle_IRQ_event进行中断处理,当在handle_IRQ_event中开中断后(我认为应该是回复EOI给PCI),如果有同种类型的中断发生,则再次进入do_IRQ函数,然后其状态位上加上IRQ_PENDING标志,但是由于前一次中断处理中加上的IRQ_INPROGRESS没有被清除,因此这里无法清除IRQ_PENDING标志,因此action还是为null,这样就无法再次执行handle_IRQ_event函数。从而退出本次中断处理,返回上一次的中断处理函数中,即继续执行handle_IRQ_event函数。当handle_IRQ_event返回时检查IRQ_PENDING标志,发现存在这个标志,说明handle_IRQ_event执行过程中被中断过,存在未处理的同类中断,因此再次循环执行handle_IRQ_event函数。直到不存在IRQ_PENDING标志为止。