導航:首頁 > 操作系統 > execsystemlinux

execsystemlinux

發布時間:2022-12-15 16:40:42

linux下exec函數不返回結果

yes you are right , exec 是不返回的,它將當前進程的內容替換成要執行的程序的內容,這樣就可以運行一個新的程序了。如果exec 返回了說明執行新程序出錯了,內存不夠啊,系統異常啊。。

② linux中system和exec函數的區別

system是再另起一個進程來執行system裡面的命令,而exec是在本進程內自行exec裡面的內容,不另外創建進程。

③ 嵌入式裡面的system,exec是什麼_

linux的系統調用,執行某個可執行文件

system是再另起一個進程來執行system裡面的命令
exec是在本進程內自行exec裡面的內容,不另外創建進程。

嵌入式系統(Embedded system),是一種「完全嵌入受控器件內部,為特定應用而設計的專用計算機系統」,根據英國電氣工程師協會( U.K. Institution of Electrical Engineer)的定義,嵌入式系統為控制、監視或輔助設備、機器或用於工廠運作的設備。與個人計算機這樣的通用計算機系統不同,嵌入式系統通常執行的是帶有特定要求的預先定義的任務。由於嵌入式系統只針對一項特殊的任務,設計人員能夠對它進行優化,減小尺寸降低成本。嵌入式系統通常進行大量生產,所以單個的成本節約,能夠隨著產量進行成百上千的放大。

④ linux中system和exec函數的區別

system是用shell來調用程序=fork+exec+waitpid,而exec是直接讓你的程序代替用來的程序運行。
system 是在單獨的進程中執行命令,完了還會回到你的程序中。而exec函數是直接在你的進程中執行新的程序,新的程序會把你的程序覆蓋,除非調用出錯,否則你再也回不到exec後面的代碼,就是說你的程序就變成了exec調用的那個程序了。
看一下,下面的例子.
例子1
---------------------------------
system("your_program");
printf("You can see me! ");
---------------------------------
例子2
---------------------------------
exec("your_program");
printf("You can't see me! ");
---------------------------------
在例子1中,在你的程序執行完畢以後,會執行printf語句。
在例子2中,由於exec將程序your_program代替了本身,因此程序不再會執行printf語句。
在Linux下,exec通常會和fork語句一起用。
看下面的這個例子
--------------------------------------------
pid_t pid = fork();
if (pid < 0) {
printf(「fork error!」);
exit(-1);
} else if (pid == 0) {
//這里是子進程
printf("I'm son! ");
//執行其它的程序
exec("your_program");
} else {
//這里是父進程
printf("i'm father!");
wait();//等待子進程結束後返回
exit(0);
}

⑤ 在linux系統下實現對system() 函數對fork() ,exec(),waitpid()函數的調用。求大神解答

不知道你這實現這些函數的調用是什麼意思,是要重寫這些介面嗎?還是舉個例子說明?
我解釋一下吧:
(1)system()其實就是對fork()和exec()函數族等的封裝。
(2)fork()是用來產生子進程的,是現在我知道的唯一一個返回兩個值的函數(有過有另外的,麻煩網友指出),返回-1表示執行失敗;否則返回大於0的值時,表示是子進程的進程號,返回0時,表示父進程創建子進程成功。
(3)exec()不是一個函數,是函數族,有execl(),execv(),execle(),execve(),execlp(),execvp(),它們常用於子進程中「脫胎換骨」,就是父進程創建子進程後,子進程幾乎是父進程的拷貝(只有很少的東西不一樣,如進程號(PID)等),然後子進程調用exec()函數族執行其他的程序,即將原來進程的東西全部清除掉,稱為一個嶄新的進程,所以叫「脫胎換骨」。
(4)waitpid()是用在父進程中等待進程退出的,如果父進程不調用這個介面,那麼它有可能先於子進程退出,那麼子進程就會稱為孤兒進程,繼而被init進程(PID為1的進程,Linux啟動後第一個啟動的進程)收養。或者父進程並未退出,也未調用這個介面,但是子進程已經執行完成,那麼子進程就會成為一個僵屍進程。
具體例子在網上找找吧,都不是很難。

php在linux下執行exec和system函數,返回值為126代表什麼意思

返回值是你所執行的命令的返回值,這個要看你執行的命令是什麼了。
linux 下,一般命令執行成功的返回值是零,非零表示錯誤代碼,你需要查找命令的相關手冊。

⑦ Linux命令SYSTEM()啟動命令

system是一個使用簡單,設計復雜的程序。
它主要包含fork exec waitpid三個步驟。
下來我來還原樓主的錯誤:
程序A:
/* socksrv.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /* for struct sockaddr_in*/

#define BACKLOG 10
#define MYPORT 4000

int main()
{
char *addr;
int sockfd;
int new_fd;
struct sockaddr_in my_addr, their_addr;

int res;
int sin_size;

char *buf;
/* 取得套接字描述符*/
sockfd = socket(AF_INET, /* domain*/
SOCK_STREAM, /* type*/
0); /* protocol*/

if (sockfd == -1) {
perror("socket");
exit(1);
}

/* Init sockaddr_in */
my_addr.sin_family = AF_INET; /* 注意: 應使用主機位元組順序*/
my_addr.sin_port = htons(MYPORT); /* 注意: 應使用網路位元組順序*/
my_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 使用自己的 IP 地址 */
bzero(&(my_addr.sin_zero), 8); /* 結構的其餘的部分須置 0*/

/* 指定一個套接字使用的地址及埠*/
res = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));
if (res == -1) {
perror("bind");
exit(1);
}

/* 監聽請求, 等待連接*/
res = listen(sockfd,
BACKLOG); /* 未經處理的連接請求隊列可容納的最大數目*/
if (res == -1) {
perror("listen");
exit(1);
}
system("./hello&");
/* 接受對方的連接請求, 建立連接,返回一個新的連接描述符.
* 而第一個套接字描述符仍在你的機器上原來的埠 listen()
*/
sin_size = sizeof(struct sockaddr_in);
new_fd = accept(sockfd, (void *)&their_addr, &sin_size);

buf = (char *)malloc(255);
if (buf == NULL) {
printf("malloc failed\n");
exit(1);
}

/* 接受對方發來的數據*/
res = recv(new_fd, buf, 255, 0);
if (res == -1) {
perror("recv()");
exit(1);
}

/* 關閉本次連接*/
close(new_fd);

/* 關閉系統監聽*/
close(sockfd);

printf("recv data:%s\n", buf);
free(buf);
return 0;
}
程序B:hello,在主程序中用system("./hello&)調用。
#include <stdlib.h>
int main(){
while(1){
sleep(1000);
}
return 0;
}
編譯後運行程序A。我們可以在其它終端窗口看到 ./A ./hello正在運行,netstat -a 看到,tcp 4000埠被 佔用。
我們用Ctrl+c中斷程序A模擬樓主的崩潰操作。
這時,再在其它終端窗口看看,./A沒有了。./hello還在運行。netstat -a看到。4000埠還在佔用。
這時再次運行./A,提示bind: Address already in use而退出。
情況就是這樣。
因為執行system時,系統會fork一個A的子進程,再去執行B.
當你的A崩潰以後,它的一個子進程實際上還在運行,它打開的埠,文件,等還在使用。
所以再次運行A時,由於自定的互斥機制而退出。
如:再次綁定埠時提示埠已在使用。
殺死B後,A的子進程結束,它的資源釋放,所以才能再次運行A。
我建議樓主使用exec系列函數來啟動B。

⑧ linux下,php啟用exec(),system(),passthru(),這幾個函數失敗,返回值是1、127、126

是不是函數未定義,這幾個函數模塊沒有開啟,所以不支持,找到模塊函數將注釋去掉,重啟apache試試

閱讀全文

與execsystemlinux相關的資料

熱點內容
51單片機程序單步視頻 瀏覽:239
家庭寬頻如何連接伺服器 瀏覽:117
汽車高壓泵解壓 瀏覽:770
上門正骨用什麼app 瀏覽:758
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:923
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:497
軟考初級程序員大題分值 瀏覽:475
js壓縮視頻文件 瀏覽:580
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506