CS:APP 第8章 異常控制流 作業(yè)

8.9

進(jìn)程對(duì) 并發(fā)?
AB
AC
AD
BC
BD
CD

8.10

A

fork

B

execve笤成,longjmp

C

setjmp

8.11

4

8.12

8

8.13

x=4
x=3
x=2

8.14

3

8.15

5

8.16

counter = 2

8.17

三種可能性。

1
Hello
0
1
Bye
2
Bye
2
Hello
1
0
Bye
2
Bye
3
Hello
1
Bye
0
2
Bye

8.18

A,C,E

8.19

2^n

8.20

#include <unistd.h>
using namespace std;

int main(int argc, char* argv[], char* envp[])
{
    execve("/bin/ls", argv, envp);
}

不明白意義何在眷茁,練習(xí)如何使用execve么炕泳。。

8.21

abcbac

8.22

#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>

void unix_error(char* msg){
    fprintf(stderr, "%s : %s\n", msg, strerror(errno));
}

pid_t Fork(){
    pid_t pid;
    if((pid = fork()) < 0)
        unix_error("Fork error");
    return pid;
}

int mysystem(char* command){
    pid_t pid = Fork();
    if(pid){
        int status;
        wait(&status);
        if(WIFEXITED(status))
            return WEXITSTATUS(status);
        if(WIFSIGNALED(status))
            return WTERMSIG(status);
    }else{
        char* argv[] = {"/bin/sh", "-c", command, NULL};
        execve("/bin/sh", argv, NULL);
    }

}

int main(int argc, char* argv[], char* envp[])
{
    printf("exit code: %d\n", mysystem(argv[1]));
    fflush(stdout);
}

mac上好像ctrl+c無法觸發(fā)上祈,通過資源監(jiān)視器殺進(jìn)程可以觸發(fā)非正常退出的分支培遵。

8.23

信號(hào)量不會(huì)排隊(duì),當(dāng)子進(jìn)程給父進(jìn)程發(fā)送信號(hào)時(shí)登刺,第一個(gè)信號(hào)會(huì)被接受并且處理籽腕,第二個(gè)信號(hào)會(huì)被記錄并且等待第一個(gè)信號(hào)處理完成,其他的信號(hào)都會(huì)被簡(jiǎn)單地丟棄塘砸。
所以正如教材前面所說的,不能使用信號(hào)量對(duì)其他進(jìn)程中的某些東西計(jì)數(shù)晤锥。

8.24

#include "csapp.h"
#define N 2

int main(){
    int status, i;
    pid_t pid;
    /* Parent creates N children */
    for(i = 0; i < N; i++)
        if((pid = Fork()) == 0){
            int* p = 0x0;
            *p = 1;
            exit(0);
        }
    /* Parent reaps N children in no particular order */
    while((pid = waitpid(-1, &status, 0)) > 0){
        if(WIFEXITED(status))
            printf("child %d terminated normally with exit status = %d\n", pid, WEXITSTATUS(status));
        else if(WIFSIGNALED(status)){
            Sio_puts("child ");
            Sio_putl(pid);
            psignal(SIGSEGV, " terminated by signal 11");
        }
    }
    /* The only normal termination is if there are no more children */
    if(errno != ECHILD)
        unix_error("waitpid error");
    exit(0);
}
運(yùn)行輸出:
child 42018 terminated by signal 11: Segmentation fault
child 42019 terminated by signal 11: Segmentation fault

一開始沒看懂題目意思掉蔬,看懂后閱讀psignal相關(guān)資料就可以完成,注意使用printf會(huì)出問題矾瘾,因?yàn)?code>printf并不是安全的女轿,這里使用的是SioputsSioputl,也可以使用sprintf先寫到緩沖區(qū)然后利用psignal進(jìn)行輸出壕翩。

8.25

#include "csapp.h"

sigjmp_buf buf;

void sigchld_handler(int sig){
    siglongjmp(buf, 1);
}

char* tfgets(char* str){
    if(sigsetjmp(buf, 1))
        return NULL;
    pid_t pid;
    if(signal(SIGCHLD, sigchld_handler) == SIG_ERR)
        unix_error("set SIGCHLD error");
    if((pid = Fork()) == 0){
        sleep(5);
        exit(0);    
    }else{
        return gets(str);
    }
}

int main(){
    char buf[256];
    puts(tfgets(buf));
}

首先得開一個(gè)子進(jìn)程對(duì)五秒時(shí)間進(jìn)行計(jì)數(shù)蛉迹,如果子進(jìn)程成功返回說明超時(shí)應(yīng)該返回NULL,不然直接返回gets的結(jié)果就行放妈。
所以父進(jìn)程應(yīng)該直接調(diào)用gets滿足不超時(shí)的情況北救,問題在于超時(shí)后父進(jìn)程捕捉到子進(jìn)程結(jié)束時(shí)的仍在等待gets荐操,而signal handler只能返回到當(dāng)前指令無法對(duì)流程進(jìn)行控制,這時(shí)候就應(yīng)該使用非本地跳轉(zhuǎn)返回到注冊(cè)地進(jìn)行處理珍策。
理論上感覺goto也是可以的托启,由于實(shí)用性不高沒有進(jìn)行嘗試。

8.26

其實(shí)就是shell lab攘宙,等待完成中屯耸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹭劈,隨后出現(xiàn)的幾起案子疗绣,更是在濱河造成了極大的恐慌,老刑警劉巖铺韧,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件多矮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡祟蚀,警方通過查閱死者的電腦和手機(jī)工窍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來前酿,“玉大人患雏,你說我怎么就攤上這事“瘴” “怎么了淹仑?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肺孵。 經(jīng)常有香客問我匀借,道長,這世上最難降的妖魔是什么平窘? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任吓肋,我火速辦了婚禮,結(jié)果婚禮上瑰艘,老公的妹妹穿的比我還像新娘是鬼。我一直安慰自己,他們只是感情好紫新,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布均蜜。 她就那樣靜靜地躺著,像睡著了一般芒率。 火紅的嫁衣襯著肌膚如雪囤耳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音充择,去河邊找鬼德玫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聪铺,可吹牛的內(nèi)容都是我干的化焕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼铃剔,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼撒桨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起键兜,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤凤类,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后普气,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谜疤,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年现诀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夷磕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仔沿,死狀恐怖坐桩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情封锉,我是刑警寧澤绵跷,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站成福,受9級(jí)特大地震影響碾局,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奴艾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一净当、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蕴潦,春花似錦像啼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽备徐。三九已至萄传,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秀菱。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工振诬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衍菱。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓赶么,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脊串。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辫呻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 異撤殴耄控制流 系統(tǒng)需要能夠?qū)ο到y(tǒng)狀態(tài)的改變做出反應(yīng),這些系統(tǒng)狀態(tài)不是被內(nèi)部程序變量捕獲的缕坎,而且也不一定和程序的執(zhí)行相...
    Cool_Pomelo閱讀 672評(píng)論 0 5
  • 異常 當(dāng)處理器檢測(cè)到有事件發(fā)生時(shí)谜叹,他就會(huì)通過一張叫做異常表的跳轉(zhuǎn)表匾寝,進(jìn)行一個(gè)間接的過程調(diào)用,轉(zhuǎn)到專門用于處理這類事...
    userheng閱讀 412評(píng)論 0 0
  • 8.1 引言 在理解線程之前荷腊,首先需要了解UNIX/Linux進(jìn)程艳悔。 進(jìn)程是由操作系統(tǒng)創(chuàng)建的,需要相當(dāng)數(shù)量的“開銷...
    MachinePlay閱讀 395評(píng)論 0 0
  • 一停局、Linux系統(tǒng)概述 不加引號(hào)可理解為宏很钓,直接替換,單引號(hào)中特殊字符會(huì)被解釋為普通字符董栽,雙引號(hào)中$,,'還是特殊...
    赤果_b4a7閱讀 1,510評(píng)論 0 2
  • 摘 要 為了對(duì)計(jì)算機(jī)系統(tǒng)有著更深入的了解以及研究系統(tǒng)間的協(xié)作關(guān)系码倦。本大作業(yè)針對(duì)hello程序運(yùn)行的一系列過程對(duì)c...
    icey_J閱讀 473評(píng)論 0 0