1. 程式人生 > >Linux執行緒掛掉是否影響程序

Linux執行緒掛掉是否影響程序

嚴格的說沒有“執行緒崩潰”,只是觸發了SIGSEGV (Segmentation Violation/Fault)。如果沒有設定對應的Signal Handler作業系統就自動終止程序(或者說預設的Signal Handler就是終止程序);如果設定了,理論上可以恢復程序狀態繼續跑(用longjmp之類的工具) 執行緒有自己的 stack,但是沒有單獨的 heap,也沒有單獨的 address space。只有程序有自己的 address space,而這個 space 中經過合法申請的部分叫做 process space。Process space 之外的地址都是非法地址。當一個執行緒向非法地址讀取或者寫入,無法確認這個操作是否會影響同一程序中的其它執行緒,所以只能是整個程序一起崩潰。 1.程序(主執行緒)建立了多個執行緒,多個子執行緒均擁有自己獨立的棧空間(儲存函式引數、區域性變數等),但是多個子執行緒和主執行緒共享堆、全域性變數等非棧記憶體。 2.如果子執行緒的崩潰是由於自己的一畝三分地引起的,那就不會對主執行緒和其他子執行緒產生影響,但是如果子執行緒的崩潰是因為對共享區域造成了破壞,那麼大家就一起崩潰了。3.舉個栗子:主執行緒是一節車廂的乘務員,諸多乘客(也就是子執行緒)就是經過乘務員(主執行緒)檢票確定可以進入車廂的,也就是主執行緒建立了諸多子執行緒,每個子執行緒有自己獨立的區域(座位啊啥的),但是諸多乘客和乘務員共享走廊啊衛生間啊等等,如果其中一名乘客座位壞了,摔了(可以認為奔潰了),那麼其他乘客和乘務員都不受影響,但是如果乘客將衛生間給破壞了,他也無法使用衛生間(崩潰了),其他乘客和乘務員也不能用衛生間,好吧,那麼大家一起憋著吧(崩潰了)。 總體來說,執行緒沒有獨立的地址空間,如果崩潰,會發訊號,如果沒有錯誤處理的handler,OS一般直接殺死程序。就算是有handler了處理,一般也會導致程式崩潰,因為很有可能其他執行緒或者程序的資料被破壞了。

相關推薦

Linux執行是否影響程序

嚴格的說沒有“執行緒崩潰”,只是觸發了SIGSEGV (Segmentation Violation/Fault)。如果沒有設定對應的Signal Handler作業系統就自動終止程序(或者說預設的Signal Handler就是終止程序);如果設定了,理論上可以恢復程

根據Linux 執行起與喚醒原理,實現Sleep的暫停與繼續

在呼叫pthread_cond_wait()前必須由本執行緒加鎖(pthread_mutex_lock()),而在更新條件等待佇列以前,mutex保持鎖定狀態,並在執行緒掛起進入等待前解鎖。在條件滿足從而離開pthread_cond_wait()之前,mutex將被重新加鎖,以與進入pthread_cond_

Linux 執行】同一個程序中的執行共享哪些資源

程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位.  執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧)

Linux 執行程序總結

1 Linux 中的程序與執行緒 對於 Linux 來講,所有的執行緒都當作程序來實現,因為沒有單獨為執行緒定義特定的排程演算法,也沒有單獨為執行緒定義特定的資料結構(所有的執行緒或程序的核心資料結構都是 task_struct)。 對於一個程序,相當於是它含有一個執行緒,就是它自身。對於多執行緒來說,原

程序與多執行(五)--Linux 執行模型的比較:LinuxThreads 和 NPTL(轉)

當 Linux 最初開發時,在核心中並不能真正支援執行緒。但是它的確可以通過 clone() 系統呼叫將程序作為可排程的實體。這個呼叫建立了呼叫程序(calling process)的一個拷貝,這個拷貝與呼叫程序共享相同的地址空間。LinuxThreads 專案使用這個呼叫來完全在使用者空間模擬對執行緒的支援

程序與多執行(八)--Linux 執行實現機制分析 (轉)

按照教科書上的定義,程序是資源管理的最小單位,執行緒是程式執行的最小單位。在作業系統設計上,從程序演化出執行緒,最主要的目的就是更好的支援SMP以及減小(程序/執行緒)上下文切換開銷。無論按照怎樣的分法,一個程序至少需要一個執行緒作為它的指令執行體,程序管理著資源(比如cpu、記憶體、檔案等等),而將執行緒分

Linux 執行程序)數限制分析

1.問題來源 公司線上環境出現MQ不能接受訊息的異常,運維和開發人員臨時切換另一臺伺服器的MQ後恢復。同時運維人員反饋在出現問題的伺服器上很多基本的命令都不能執行,出現如下錯誤: 2.   初步原因分析和解決 讓運維的兄弟在服務上檢視記憶體、CPU、網路、IO

三十七、Linux 執行——執行清理和控制函式、程序執行啟動方式比較、執行的狀態轉換

37.1 執行緒清理和控制函式 1 #include <pthread.h> 2 3 void pthread_cleanup_push(void (* rtn)(void *), void *arg); 4 void pthread_cleanup_pop(int execute);

Linux執行淺析[關於執行的清理,與程序的對比,以及執行的各個狀態]

Linux執行緒淺析[執行緒資源回收] 執行緒的清理和控制函式 執行緒與程序對比 執行緒的各種狀態 其實之前在看到程序的時候,子程序在死亡之後,其資源回收不了,這就導致了後臺一直有個殭屍程序一直回收不了.那麼線上程中呢?執行緒雖然是共享了其程序中的記憶體資

32位的apk 在64位平臺上執行不停的問題

01-01 00:55:41.800 E/AndroidRuntime(12543): FATAL EXCEPTION: main 01-01 00:55:41.800 E/AndroidRuntime(12543): Process: cn.digirun.update, PID: 12543

Java併發程式設計(3):執行起、恢復與終止的正確方法(含程式碼)

JAVA大資料中高階架構 2018-11-06 14:24:56掛起和恢復執行緒Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啟某個執行緒,這些方法已經被淘汰,因為它們是不安全的,不穩定的。如果在不合適的時候掛起執行緒(比如,鎖定共享資源時),此時便可能會發生死鎖條件——其他執行緒在等待該

Linux-執行互斥-鎖

互斥鎖     當一個共享資源的操作不是原子的,在多執行緒同時訪問共享資源時可能會出現達不到預期的效果錯誤,為了解決共享資源操作競爭的問題,引入了互斥鎖。      1、訪問共享資源前,必須申請該互斥鎖,若處於開鎖狀態,則申請到鎖物件,並立即

Linux-執行

pthread     pthread_create建立一個執行緒並馬上開始執行執行緒函式;pthread_cancel取消執行緒,可線上程函式中設定“可取消性”的狀態和型別;pthread_join以阻塞方式等待指定執行緒結束,執行緒可用pthread_cance

linux執行執行安全之條件變數

條件變數用法: 條件變數一般和互斥量配合,保護執行緒安全或者完成同步資料的功能。 #include <pthread.h> #define INFINITE 0xFFFFFFFF #ifndef ETIMEDOUT #define ETIMEDOUT 10060 #endif

Linux 執行管理

Linux 執行緒管理 。 https://blog.csdn.net/swjtufq/article/details/53409638 相信大家用java語言寫執行緒已經很熟悉了,今天我們就來看下,在Linux下開發的時候怎麼進行執行緒的管理 1 pthread_create函式 建立一個

linux執行基礎概念及多執行程式設計

Linux中執行緒的概念: 首先,Linux中並不存在真在的執行緒。Linux中的執行緒是使用程序來模擬的。在一個程序需要同時執行多個執行流時,linux並不是開闢多個執行緒來執行,而是通過多個程序來模擬多個執行緒。 Linux中執行緒的實現原理: 首先先看一下張圖: 此時共有

Linux 執行同步---條件變數

        pthread_cond_signal 使在條件變數上等待的執行緒中的一個執行緒重新開始。如果沒有等待的執行緒,則什麼也不做。如果有多個執行緒在等待該條件,只有一個能重啟動,但不能指定哪一個。    

linux執行數限制與zabbix監控

  Linux最大執行緒數限制及當前執行緒數查詢 最大執行緒數計算方式: n = total_memory/128k; Linux使用者執行緒數限制而導致的程式異常為 java.lang.OutOfMemoryError:unable to create new native thread

【小問題集02】-jdk問題定位工具箱-執行死、堆疊滿問題定位

1-前言 開發過程中,偶爾會遇到一些執行緒池佔滿、cpu使用過高、堆疊滿了的問題,需要進一步分析執行緒具體位置,從而做進一步分析,現將linux和jdk自帶的一些執行緒除錯手段總結如下,供使用者盡一份分析。 更多內容: 2- 定位手段 2.1java visualVM圖形化工

記今天學習Linux執行遇到的關於sleep(0)的問題

寫了一段小程式碼,目的是實現 在程序裡用pthread_create()建立新執行緒thread,然後sleep當前的main執行緒,程式就會進入剛建立的新執行緒thread,然後新執行緒thread再sleep,main執行緒sleep結束後又可以獲得CPU,如此迴圈幾次。 一開始以為第一