導航:首頁 > 操作系統 > linux中斷線程

linux中斷線程

發布時間:2024-06-21 11:48:20

linux內核中斷之中斷調用流程

本文基於 RockPI 4A 單板Linux4.4內核介紹中斷調用流程。

ARMv8包括兩種運行狀態:AArch64和AArch32。

AArch64中不再使用AArch32中的7種特權模式,而是提出了Exception Levels的概念,包括:

1)EL0:用於用戶態程序,許可權最低

2)EL1:給內核使用,許可權稍高

3)EL2:虛擬化相關,許可權更高

4)EL3:安全相關,許可權最高

Linux內核中一般只使用EL0和EL1。

AArch64異常向量表中的異常包括:

1)Synchronous exception(同步異常)

2)SError

3)IRQ

4)FIQ

註:SError、IRQ和FIQ屬於非同步異常。

在Linux內核中,在 arch/arm64/kernel/entry.S 文件中定義了異常向量表,內容如下:

選取 el1_irq() 函數介紹Linux內核中斷的調用流程。

文件: arch/arm64/kernel/entry.S ,調用流程如下:

1、handle_irq()初始化

在 DTS 解析階段完成 handle_irq() 函數的初始化,流程如下:

gic_irq_domain_map() 函數中完成了 handle_irq() 函數的賦值,具體執行如下:

2、handle_irq()實現

以共享外設中斷 SPI 的中斷處理函數 handle_fasteoi_irq() 為例,繼續跟蹤中斷的執行過程。

handle_irq_event_percpu() 函數會調用已經注冊的中斷處理函數,同時喚醒 irq_thread 線程。

3、中斷處理線程

在使用 request_threaded_irq() 函數申請中斷時,會創建一個 irq_thread 線程,調用流程如下:

irq_thread 線程平時在睡眠狀態,等待 handle_irq_event_percpu() 函數喚醒,進一步執行已注冊的中斷處理線程函數。

使用 DRM 框架中 HDMI 中斷驗證中斷調用流程。

文件: driversgpudrmridgesynopsysdw-hdmi.c

在中斷處理函數 dw_hdmi_hardirq() 和中斷處理線程函數 dw_hdmi_irq 中增加 mp_stack() 調用( 註:僅限於調試驗證 )。

插入 HDMI 線,系統啟動後,顯示中斷調用流程的日誌如下:

Ⅱ Linux中,shell腳本如何使用信號機制去控制線程的開啟關閉

trap是Linux的內建命令,用於捕捉信號,trap命令可以指定收到某種信號時所執行的命令。trap命令的格式如下:trap command sig1 sig2 ... sigN,當接收到sinN中任意一個信號時,執行command命令,command命令完成後繼續接收到信號前的操作,直到腳本結束。利用trap命令捕捉INT信號(即與Ctrl+c綁定的中斷信號)。trap還可以忽略某些信號,將command用空字元串代替即可,如trap "" TERM INT,忽略kill %n和Ctrl+c發送的信號(kill發送的是TERM信號)。Linux更強勁的殺死進程的命令:kill -9 進程號(或kill -9 %n作業號)等價與kill -KILL 進程號。

舉個例子

最近小A需要生產2015年全年的KPI數據報表,現在小A已經將生產腳本寫好了,生產腳本一次只能生產指定一天的KPI數據,假設跑一次生產腳本需要5分鍾,那麼:

如果是循環順序執行,那麼需要時間:5 * 365 = 1825 分鍾,約等於 6 天

如果是一次性放到linux後台並發執行,365個後台任務,系統可承受不住哦!

既然不能一次性把365個任務放到linux後台執行,那麼,能不能實現自動地每次將N個任務放到後台並發執行呢?當然是可以的啦。

#!/bin/bash
source/etc/profile;
#-----------------------------
tempfifo=$$.fifo#$$表示當前執行文件的PID
begin_date=$1#開始時間
end_date=$2#結束時間
if[$#-eq2]
then
if["$begin_date">"$end_date"]
then
echo"Error!$begin_dateisgreaterthan$end_date"
exit1;
fi
else
echo"Error!Notenoughparams."
echo"Sample:shloop_kpi2015-12-012015-12-07"
exit2;
fi
#-----------------------------
trap"exec1000>&-;exec1000<&-;exit0"2
mkfifo$tempfifo
exec1000<>$tempfifo
rm-rf$tempfifo
for((i=1;i<=8;i++))
do
echo>&1000
done
while[$begin_date!=$end_date]
do
read-u1000
{
echo$begin_date
hive-fkpi_report.sql--hivevardate=$begin_date
echo>&1000
}&
begin_date=`date-d"+1day$begin_date"+"%Y-%m-%d"`
done
wait
echo"done!!!!!!!!!!"



第6~22行:比如:sh loop_kpi_report.sh 2015-01-01 2015-12-01:

$1表示腳本入參的第一個參數,等於2015-01-01

$2表示腳本入參的第二個參數,等於2015-12-01

$#表示腳本入參的個數,等於2

第13行用於比較傳入的兩個日期的大小,>是轉義

第26行:表示在腳本運行過程中,如果接收到Ctrl+C中斷命令,則關閉文件描述符1000的讀寫,並正常退出

exec 1000>&-;表示關閉文件描述符1000的寫

exec 1000<&-;表示關閉文件描述符1000的讀

trap是捕獲中斷命令

第27~29行:

第27行,創建一個管道文件

第28行,將文件描述符1000與FIFO進行綁定,<讀的綁定,>寫的綁定,<>則標識對文件描述符1000的所有操作等同於對管道文件$tempfifo的操作

第29行,可能會有這樣的疑問:為什麼不直接使用管道文件呢?事實上這並非多此一舉,管道的一個重要特性,就是讀寫必須同時存在,缺失某一個操作,另一個操作就是滯留,而第28行的綁定文件描述符(讀、寫綁定)正好解決了這個問題

第31~34行:對文件描述符1000進行寫入操作。通過循環寫入8個空行,這個8就是我們要定義的後台並發的線程數。為什麼是寫空行而不是寫其它字元?因為管道文件的讀取,是以行為單位的

第37~42行:

第37行,read -u1000的作用就是讀取管道中的一行,在這里就是讀取一個空行;每次讀取管道就會減少一個空行

第39~41行,注意到第42行結尾的&嗎?它表示進程放到linux後台中執行

第41行,執行完後台任務之後,往文件描述符1000中寫入一個空行。這是關鍵所在了,由於read -u1000每次操作,都會導致管道減少一個空行,當linux後台放入了8個任務之後,由於文件描述符1000沒有可讀取的空行,將導致read -u1000一直處於等待。

Ⅲ linux如何殺掉線程

我們使用linux時遇到埠佔用,在了解佔用程序影響不大的情況下,會通過netstat命令找到佔用埠的進程,直接kill掉
查找埠佔用命令:
netstat -tnlp | grep 80
可以看到,進程id為20902的進程佔用了80埠
我們可以選擇使用命令 kill pid 殺掉進程
kill 20902

或者使用kill -9 pid 強殺進程
kill -9 20902

如果你需要殺掉所有篩選結果下的進程可以使用
ps -aux|grep name|awk '{print $2}'|xargs kill -9
其中name是你要查詢的服務名稱,例如我要查nginx的所有服務可以使用
ps -aux|grep nginx
我們要篩選出第二項pid
ps -aux|grep name|awk '{print $2}'

篩選出後要殺掉這些進程
ps -aux|grep name|awk '{print $2}'|xargs kill -9

這樣就批量殺掉篩選出的所有進程了

閱讀全文

與linux中斷線程相關的資料

熱點內容
哪個app陪伴運動 瀏覽:880
學編程每天六點起床 瀏覽:952
烏鴉搜索演算法復現 瀏覽:75
android3d切換 瀏覽:751
資源管理器選定文件夾 瀏覽:989
分數公約數的演算法 瀏覽:589
yii2引入php文件 瀏覽:564
華為p20方舟編譯器評測 瀏覽:187
pntp伺服器是什麼 瀏覽:654
程序員培訓多長時間 瀏覽:557
求aaa的和python 瀏覽:194
python因子分析代碼 瀏覽:647
python啟動時提示沒有入口 瀏覽:681
linux中oracle監聽 瀏覽:622
程序員高價值朋友圈 瀏覽:489
雲伺服器做淘寶店 瀏覽:804
程序員判3年緩3年 瀏覽:912
伺服器雲監控系統 瀏覽:653
ios暴力解壓軟體 瀏覽:431
可以搜簡便演算法的軟體 瀏覽:203