最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如果不是在main函數(shù)中而是在另一個(gè)函數(shù)中調(diào)用vfork,以后子進(jìn)程從該函數(shù)返回時(shí),會發(fā)生什么情況?

如果不是在main函數(shù)中而是在另一個(gè)函數(shù)中調(diào)用vfork,以后子進(jìn)程從該函數(shù)返回時(shí),會發(fā)生什么情況?

呼啦一陣風(fēng) 2023-04-18 19:15:30
#include <stdio.h>#include <pthread.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>#define P_INFO printf("chld %u, self %u, father %u \n", pid, getpid(), getppid())void err_sys (const char* val){  fprintf(stdout, val);  return; }void func (void){  pid_t pid = -1;    pid = vfork();  if (pid < 0) {    err_sys("vfork failed\n");   }  if ( pid == 0) {    printf("child 2\n");     P_INFO;    return;   }  if (pid > 0) {    printf("father 1 func\n");     P_INFO;             return;   } }void funf (void){  pid_t pid = getpgrp();   P_INFO;  return; }int main (int argc, char** argv) {  pid_t pid = getpgrp();  printf("father 1\n");  func();  printf("father 1, out func to funf\n");  funf();  printf("father 1, out funf to exit\n");   P_INFO;  return 0; }
查看完整描述

2 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

你這樣完全是在濫用api。你應(yīng)該搞清楚vfork是用來做什么的。在vfork()產(chǎn)生的子進(jìn)程結(jié)束或者調(diào)用exec之前,父進(jìn)程應(yīng)當(dāng)使用wait等待。

查看完整回答
反對 回復(fù) 2023-04-22
?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

挺好玩的, 我這邊看到是子進(jìn)程可以退出, 父進(jìn)程必定 segment fault.

  1. vfork, 子進(jìn)程在execexit之前, 用的是父進(jìn)程的地址空間.

  2. 在子進(jìn)程在execexit之前, 父進(jìn)程被掛起.

所以子進(jìn)程先退出, 退出后 內(nèi)核 釋放進(jìn)程內(nèi)存空間, 因?yàn)檫@里子父進(jìn)程用的是一個(gè)地址空間, 就把父進(jìn)程搞死了.


嗯, 這種行為是undefine. 另一臺機(jī)子, 結(jié)果是 Illegal instruction


查看完整回答
反對 回復(fù) 2023-04-22
  • 2 回答
  • 0 關(guān)注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號