Linux不允许进程被杀,linux – 我的进程被杀了但我无法理解内核通知
我有一個在嵌入式x86設(shè)置上運行的自定義應(yīng)用程序(使用buildroot和uClibc構(gòu)建).該應(yīng)用程序一直運行良好,但今天早上當我回到工作時,我發(fā)現(xiàn)我的進程已被殺死,并在我的終端上輸出以下內(nèi)容
SAK: killed process 1008 (CX_SC3): fd#4 opened to the tty
SAK: killed process 1009 (CX_SC3): fd#4 opened to the tty
SAK: killed process 1011 (CX_SC3): fd#4 opened to the tty
SAK: killed process 1012 (CX_SC3): fd#4 opened to the tty
現(xiàn)在CX_SC3是我的進程 – 它有多個線程,其中一個打開/ dev / ttyS0通過無線調(diào)制解調(diào)器發(fā)送消息.串口的fd編號為4.我不明白的是
> SAK意味著什么
>上面列出的PID必須引用由我的應(yīng)用程序殺死的進程,因為我的應(yīng)用程序一次只運行一個實例.是否有可能這些PID實際上是我的線程ID(因為我的應(yīng)用程序總是運行4個線程).
>如果我的應(yīng)用程序殺了其他進程,為什么我的應(yīng)用程序也被殺了?
> tty部分的開放是什么意思?從一些研究中可以看出,這與發(fā)送給我用來啟動程序的tty的中斷字符有關(guān).
我確信當你是一名Linux大師時,上述內(nèi)容非常明顯,但我很掙扎 – 任何人都可以建議哪些事件可能導致以下輸出?我的嵌入式設(shè)置非常小,使用busybox并運行vsftpd,而我的自定義應(yīng)用程序除外.至關(guān)重要的是我的應(yīng)用程序是健壯的,所以如果任何人可以建議/猜測可能導致上述事件的順序,我將非常感激.
編輯:在回應(yīng)下面的評論時,如果這是由于檢測到SAK,是否有任何可能意外觸發(fā)此問題?是否有可能在串行端口上讀取的任何內(nèi)容觸發(fā)了這個?另外,如何為我的系統(tǒng)找到SAK組合 – 我的根文件系統(tǒng)中沒有任何地方的rc.sysinit或rc.local文件.
更新:我已設(shè)法將此事件固定到主機關(guān)閉的位置.我的主機和目標設(shè)備之間有一根串行電纜,用于將串行數(shù)據(jù)發(fā)送到嵌入式目標.當我讓目標運行但關(guān)閉主機時,我的應(yīng)用程序?qū)⒈粴⑺?如上所述.當我在關(guān)閉主機之前斷開串行電纜時,我的應(yīng)用程序不會被殺死并正常運行.即使我已經(jīng)執(zhí)行了這種行為
echo 0 > /proc/sys/kernel/sysrq
按照建議.
解決方法:
在這種情況下,SAK實際上意味著Secure Attention Key.您看到的消息是drivers/tty/tty_io.c中定義的內(nèi)核消息.SAK是一種密鑰組合,可確保用戶在控制臺上的安全登錄.在Linux上,SAK通過殺死連接到終端SAK的所有進程來確保這一點.預計init將重新啟動受信任的登錄過程,如getty,然后是登錄或帶有顯示管理器的X服務(wù)器.
列出的PID確實是應(yīng)用程序CX_SC3的線程的PID,它們被SAK殺死.
對tty打開的fd #n意味著被殺死的進程/線程將文件描述符n打開到調(diào)用SAK的終端.
在Linux中有兩種方式invoking SAK:
>通過magic SysRq鍵 – 通常是Alt SysRq K(虛擬終端)或BreakK(串行控制臺).這不是你的情況,因為你已經(jīng)嘗試通過echo 0>禁用魔法SysRq. / proc / sys / kernel / sysrq并且偶然發(fā)送BreakK序列是不可能的.
>通過定義的鍵序列(虛擬終端)或中斷信號(串行控制臺).串行控制臺上的SAK可用性由setserial控制.
串行線上的Break signal是在比字符發(fā)送時間更長的時間內(nèi)連續(xù)發(fā)送間隔值(包括開始,停止和奇偶校驗位).在您的情況下,很可能在關(guān)閉主機時出現(xiàn)Break信號的狀況.請嘗試在setserial之前關(guān)閉目標設(shè)備上串行端口的SAK:
setserial /dev/ttyS0 ^sak
您可以通過setserial -g / dev / ttyS0檢查串行端口上的SAK功能狀態(tài).打開后,它會在Flags:之后顯示SAK.要在引導后自動設(shè)置選項,請參閱BusyBox系統(tǒng)上的啟動腳本,通常是/etc/init.d/rcS和/etc/rc.d/S*,或查看/etc/inittab以了解其他可能性.
標簽:linux,kernel,serial-port,kill,tty
來源: https://codeday.me/bug/20190810/1636130.html
總結(jié)
以上是生活随笔為你收集整理的Linux不允许进程被杀,linux – 我的进程被杀了但我无法理解内核通知的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯面试,面试官第一个问题是Int占多少
- 下一篇: 在财报发布前,美光科技值得买入吗?