1. 程式人生 > >多執行緒的程序呼叫exec時,將終止整個程序

多執行緒的程序呼叫exec時,將終止整個程序

由於本人才疏學淺,本文難免存在遺漏之處,歡迎大家留言指正,本人將感激不盡。

最近比較好奇,若是一個多執行緒的程序執行exec()系統呼叫時,程序將作何反應,詳情請如下程式碼:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

void * fun(){
    printf("start exec\n");
    execl("test", NULL);
}

int main(){
    pthread_t tid;

    pthread_create(&tid, NULL, fun, NULL);

    while
(1){ printf("1\n"); } return 0; }

  其中主執行緒建立了一個子執行緒,然後主執行緒迴圈輸出1。其中,子執行緒中通過execl()載入可執行檔案test,將真個程序的地址空間替換掉。

  結果顯示,主執行緒輸出一段1之後不再輸出。顯然,執行緒呼叫exec之後,整個程序都將終止掉。

相關推薦

執行程序呼叫exec終止整個程序

由於本人才疏學淺,本文難免存在遺漏之處,歡迎大家留言指正,本人將感激不盡。 最近比較好奇,若是一個多執行緒的程序執行exec()系統呼叫時,程序將作何反應,詳情請如下程式碼: #include <stdio.h> #include <st

執行--做單元測試使用執行池發現並沒有執行指定程式碼,直接跳過

案例 今天做單元測試除錯介面,發現介面呼叫成功但是並沒有執行執行緒池執行的方法,而是直接跳過執行程式碼 ExecutorService pool = Executors.newFixedThre

Linux:使用執行程式設計和訊息佇列實現兩個程序之間的聊天

思路: 一個檔案:建立一個執行緒和主函式,或者建立兩個執行緒主函式呼叫(我用這種)。 建立兩個訊息佇列, 一共兩個檔案,兩個佇列,四個程序 a.c    一個程序寫(訊息型別為1)   ---->>佇列     一個程序讀(訊息型別為2) b.c   一

執行共享MySQL連線使用事務的危險!

在多執行緒程式中,多個執行緒共享一個MySQL連線是很常見的!如今MySQL(我使用的是MySQL 5.0.51a)只要選擇BDB或者InnoDB建表(二者區別:BDB支援頁級鎖定,InnoDB支援行級鎖定),即具備事務處理能力!然而,在多執行緒共享一個MySQL連線時,使用事務卻存在的諸多危險,分析如下!

執行程式設計程式關閉了程序還在的解決方案

自己編的一個串列埠程式,從串列埠除錯助手中讀取資料,採用非同步方式,需要用到多執行緒程式設計, 但是每次執行程式,關閉程式時,開啟程序列表,發現程序還在,導致每次串列埠傳送資料過來時,都先要去手動結束程序, 找了很多方法,發現不會用, 下面是一個很簡單的方法,也很管用: 在

Linux 執行程式呼叫mallocbacktrace引發死鎖問題的除錯

       最近,參與公司開發一專案,為提高Server端的執行效率,將Server程式設計為多執行緒結構。在一次測試中發現了Server無任何響應的問題,我的第一判斷是Server程式出現了死鎖。於是,使用pstack命令檢視各執行緒的堆疊狀態。 # pstack  程

如何實現執行?實現執行為什麼要調start而不是run方法?(繼承Thread類、實現Ruable介面、Callable<V>)

什麼是程序? 作業系統中一個程式的執行週期(從開啟到關閉)。程序是具有一個或多個執行緒的執行緒組。 什麼是執行緒? 一個程序可以同時執行多個任務,任務就是執行緒,一個程序至少有一個執行緒。 執行緒執行在程序內部,執行緒是輕量級程序。 程序和執行緒比較:

實現java執行的3種方式99%人沒用過第3種

實現多執行緒的3種方式 1、繼承Thread類 看jdk原始碼可以發現,Thread類其實是實現了Runnable介面的一個例項,繼承Thread類後需要重寫run方法並通過start方法啟動執行緒。 繼承Thread類耦合性太強了,因為java只能單繼承,所以不利

簡單的BackGroundWorker執行時時重新整理UI介面並顯示進度

  BackGroundWorker是微軟提供的封裝好了的,非常實用的控制元件,我們可以在控制元件中將其拖到Winform之中,然後簡單的系統生成程式碼式的編輯事件處理。 以下是,比較經典且簡單的實用,後面的一篇較複雜,不使用微軟控制元件式,自行生成,並傳遞引數給多執行緒,並通過多

執行通訊的三大法器你真的會用嗎?

wait, notify, notifyAll 是多執行緒之間通訊最重要的 3 個方法,今天,棧長給大家普及一下它們的知識要點及應用實戰。 定義 wait:讓持有該物件鎖的執行緒等待; notify: 喚醒任何一個持有該物件鎖的執行緒; notify: 喚醒所有持有該物件鎖的執行緒; 它們 3 個的

方法快解決執行的同步安全問題以及其中鎖的問題

package cn.itcast.demo1; /* 採用同步方法形式,解決執行緒的安全問題 好處: 程式碼簡潔 將執行緒共享資料,和同步,抽取到一個方法中 在方法的宣告上,加入同步關鍵字 問題: 同步方法有鎖嗎,肯定有,同步方法中的物件鎖

[Xcode10 實際操作]八、網路與執行-(7)使用MessageUI框架建立併發送一封帶有附件的郵件

本文將演示如何使用MessageUI框架,建立併發送一封帶有附件的郵件。 使用郵件編輯檢視控制器(MFMailComposeViewController)實現郵件功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2

[java基礎]一文理解java執行必備的ychronized關鍵字從此不再混淆!

java併發程式設計中最長用到的關鍵字就是synchronized了,這裡講解一下這個關鍵字的用法和容易混淆的地方. synchronized關鍵字涉及到鎖的概念, 在java中,synchronized鎖大家又通俗的稱為:方法鎖,物件鎖 和 類鎖 三種. 先上結論! 1 無論是修飾方法還是修飾程式碼塊都

[java基礎]一文理解java執行必備的sychronized關鍵字從此不再混淆!

java併發程式設計中最長用到的關鍵字就是synchronized了,這裡講解一下這個關鍵字的用法和容易混淆的地方.synchronized關鍵字涉及到鎖的概念, 在java中,synchronized

基於Log4j NDC 執行條件下記錄日誌排查生產問題

在大吞吐,高併發的場景, 一個請求到達後端,通常是轉換成多執行緒並行處理請求, 如何通過一個標誌找到這個請求對應的多個執行緒,瞭解這個請求的完整的處理情況,從而幫助我們定位這次呼叫到底哪一步出現了問題,對我們快速定位排查生產問題是非常有用的。我們在每個子任務程式

精選執行面試題目和答案執行理解不是很到位的快來看了~

多執行緒,相信對於很多小白來說是噩夢一般的東西吧,別怕,接下來我們就來把多執行緒的一些面試題一一解讀,希望讀完這篇文章之後,能夠對多執行緒有一個更深入的瞭解。 1. 多執行緒使用的優缺點? 優點: (1)多執行緒技術使程式的響應速度更快 (2)當前沒有進行處理的任務可以將處理器時間讓

C#在執行中使用dictionary的安全問題

問題出現的情景:在計算一個特徵集中所有特徵與一個數據集的所有例項之間的所有組合距離時,採用多執行緒的方法來提高計算速度。如下,CalculateDistanceThread是計算一個特徵與資料集中所有例項的距離,並將其距離加入到tmp_dist_matrix的字典中。

使用Condition實現執行之間呼叫

一,object 類的wait,notify和notifyAll Java 執行緒類也是一個object 類,它的例項都繼承自java.lang.Thread 或其子類。wait,notify和notifyAll是Object類中的方法,常用於執行緒之間排程。 執行緒無資料執行可呼叫wait讓執行緒等待,不

執行 ThreadGroup activeCount沒有作用的情況下執行也可以自己寫ThreadGroup不一定好使

這裡只採用了Queue佇列的方式來,自己模擬ThreadGroup的功能實現private static final ThreadGroup tg = new ThreadGroup("tg");int num = tg.activeCount()有時候num取得會有誤,原

執行爬取表情包鬥圖再也難不倒我了

前言 過元旦的這段時間,小編在群裡瘋狂的搶紅包。過程中群裡的表情包滿天飛,於是小編便去瞄了一眼自己收藏的表情包。 那個數目真是少的可憐啊~ 這不是明擺著不把小編放在眼裡麼? 於是小編自己動手自己爬取了各種表情包,鬥圖再也難不倒小編了 哈哈~(豬叫聲) 程式碼