日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
「深入了解Linuxexec輸出」(linuxexec輸出)

深入了解 linux exec 輸出

尼瑪網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

在 Linux 操作系統(tǒng)中,exec 是一個非常重要的函數(shù),用于執(zhí)行一個新進程時,替代當(dāng)前進程映像。當(dāng)一個進程調(diào)用 exec 函數(shù)時,它所在的用戶空間的代碼、數(shù)據(jù)和堆棧都會被替換成新進程的映像。這個新映像會從文件系統(tǒng)中加載到進程的內(nèi)存空間中,并開始執(zhí)行。

exec 函數(shù)的常見形式是 execl,該函數(shù)用于執(zhí)行一個可執(zhí)行文件并傳遞命令行參數(shù)。execl 的原型為:

“`

int execl(const char *path, const char *arg, /* (char *) NULL */ …);

“`

其中,path 是要執(zhí)行的可執(zhí)行文件的路徑名,arg 是要傳遞給該程序的命令行參數(shù),以 NULL 結(jié)尾。

在執(zhí)行 execl 函數(shù)時,它會將指定的可執(zhí)行文件加載到當(dāng)前進程的內(nèi)存空間中,并取代當(dāng)前進程映像。這意味著,新的程序開始運行時,它將具有與當(dāng)前進程相同的 PID、PPID 以及其他環(huán)境變量和打開的文件句柄。

除了 execl,其他常見的 exec 函數(shù)包括:

– execle:與 execl 相同,但允許明確指定環(huán)境變量。

– execlp:與 execl 相同,但允許在 PATH 環(huán)境變量中查找可執(zhí)行文件。

– execv:與 execl 區(qū)別在于,它是用數(shù)組傳遞命令行參數(shù)的。

– execvp:與 execlp 區(qū)別在于,它是用數(shù)組傳遞命令行參數(shù)的。

需要注意的是,exec 函數(shù)的調(diào)用會直接取代當(dāng)前進程的映像。因此,如果調(diào)用成功,它將永久地改變進程的行為,如果調(diào)用失敗,則當(dāng)前進程將繼續(xù)運行。

exec 的輸出

通過 exec 函數(shù)執(zhí)行的新進程在啟動時將繼承當(dāng)前進程的標(biāo)準(zhǔn)輸入、輸出和錯誤輸出文件描述符。這意味著,新進程將使用當(dāng)前進程打開的文件描述符進行輸入和輸出。

有時候,我們需要將執(zhí)行新進程時的輸出保存到文件中,以進行后續(xù)處理。這可以通過將標(biāo)準(zhǔn)輸出重定向到一個文件來實現(xiàn)。重定向可以通過 dup2 函數(shù)來設(shè)置。

“`

int dup2(int oldfd, int newfd);

“`

該函數(shù)將 oldfd 所指向的文件描述符復(fù)制到 newfd 中。如果 newfd 已經(jīng)打開,dup2 將關(guān)閉它并重復(fù)打開 oldfd 所描述的文件。

在執(zhí)行 execl 函數(shù)之前,我們需要先將標(biāo)準(zhǔn)輸出文件描述符重定向到文件中。示例如下:

“`c

#include

#include

#include

#include

#include

int mn()

{

int fd = open(“output.log”, O_WRON|O_CREAT|O_TRUNC, 0644);

if (fd

perror(“open”);

return -1;

}

if (dup2(fd, STDOUT_FILENO)

perror(“dup2”);

return -1;

}

close(fd);

execl(“/bin/ls”, “l(fā)s”, “-l”, (char *) NULL);

perror(“execl fled”);

return -1;

}

“`

該程序會將標(biāo)準(zhǔn)輸出重定向到名為 output.log 的文件中,并以 ls -l 的方式執(zhí)行 /bin/ls。執(zhí)行完程序后,輸出將被保存到 output.log 文件中。如果沒有重定向標(biāo)準(zhǔn)輸出,則輸出將打印到終端上。

相關(guān)問題拓展閱讀:

  • 【exec】shell腳本中的 exec 命令
  • linux的find -exec命令的問題

【exec】shell腳本中的 exec 命令

exec 是 bash 的內(nèi)置命令

shell 的內(nèi)件命令exec執(zhí)行命令時,不啟用新的shell進程。

source 和 . 不啟用新的shell,在當(dāng)前shell中執(zhí)行,設(shè)定的局部變量在執(zhí)行完命令后仍然有效。

bash 或 sh 或 shell script 執(zhí)行時,另起一個子shell,其繼承父shell的環(huán)境變量,其子shelll的變量執(zhí)行完后不影響父shell。

exec是用被執(zhí)行的命令行替換掉當(dāng)前的shell進程,且exec命令后的其他命令將不再執(zhí)行。

例如在當(dāng)前shell中執(zhí)行 exec ls  表示執(zhí)行l(wèi)s這條命令來替換當(dāng)前的shell ,即為執(zhí)行完后會退出當(dāng)前shell。

為了避免這個結(jié)果的影響,一般將exec命令放到一個shell腳本中,用主腳本調(diào)用這個腳本,調(diào)用處可以用bash  xx.sh(xx.sh為存放exec命令的腳本),這樣會為xx.sh建立一個子shell去執(zhí)行,當(dāng)執(zhí)行exec后該子腳本進程就被替換成相應(yīng)的exec的命令。

其中有一個例外:當(dāng)exec命令對文件描述符操作的時候,就不會替換shell,而是操作完成后還會繼續(xù)執(zhí)行后面的命令!

在shell腳本中使用exec命令,根據(jù)操作的對象不同會有不同的行為

文件描述符

shell中描述符一共有12個

0  代表標(biāo)準(zhǔn)輸入

1  代表標(biāo)準(zhǔn)輸出

2  錯誤輸出

其他 3-9 都是空白描述符

#  exec3>&1 4>&2 1>> bash.log 2>&1

其含義是: 復(fù)制標(biāo)準(zhǔn)輸出到3 ,錯誤輸出到 4 ,把 3 4 保存在bash.log 這個文件中。

#  ./bash.sh  >> bash.log   2>&1

其含義是:將bash.sh腳本執(zhí)行的標(biāo)準(zhǔn)輸出和錯誤輸出追加重定向到 bash.log

如果exec 跟的是其他命令,則其他命令結(jié)束后,本shell也隨之停止

#  cat test_exec.sh

###################

#!/bin/bash  

echo “Hello mysql”  

exec echo “Hello oracle”  

echo “Hello sqlserver”

####################

可以看到隨著 echo ” hello oracle”  這條指令運行完本 整個腳本執(zhí)行完畢,后面的 echo ” hello db2″ 沒有執(zhí)行!

Linux shell 腳本中, $@ 和$# 分別是什么意思?

$@  表示所有腳本參數(shù)的內(nèi)容

$# 表示返回所有腳本參數(shù)的個數(shù)

示例:編寫如下shell腳本,保存為test.sh

###############

#!/bin/sh

echo “number:$#”

echo “argume:$@”

###############

執(zhí)行腳本:

./test.sh first_arg  second_arg

說明:給腳本提供了兩個參數(shù),所以$#輸出的結(jié)果是2,$@代表了參數(shù)的內(nèi)手冊容!

怎么理解shell腳本中  exec “`dirname “$0″`/node””$0”  “$@” ?

$# 腳本自己的路徑

“`dirname “$0″`”/node    # 腳本目錄下的node程序的路徑

$@# 腳本被執(zhí)行時的命令行參數(shù)

合起來就是:用腳本目錄下的node程序來解釋這個腳本本身

exec scala “$0” “$@”是什么意思

這是bash語法。

$0  表示當(dāng)前腳本的名字

$@  表示當(dāng)前腳本執(zhí)沒前行的所有參數(shù)

exec scala “$0” “$@”    表示用scala命令,帶參數(shù),執(zhí)行當(dāng)前腳本

exec  sh “$0  在這個文件里,exec sh  $0是什么意思?

############

#!/bin/sh

echo  “Hello!”

sleep 2

execsh 畢察宏”$0″

#############

$0   是位置參數(shù),表示腳本名稱

$1   表示腳本的之一個參數(shù),依次類推直到$9

exec用于執(zhí)行命令、或腳本、或外部可執(zhí)行程序,會新建一個shell去執(zhí)行

綜上,這里exec sh  “$0”  就是執(zhí)行腳本本身

所以,就是一個循環(huán)過程,每隔兩秒打印一次 Hello

#############

#!/bin/sh

echo  “Hello!”

sleep 2

exec   “$0”

#############

linux的find -exec命令的問題

find . -size +c -exec cp /dev/null {} \;

這茄信條指令毀納瞎是將找纖空到的清除

find . -size +200M -exec /bin/cp /dev/null {} \;

試試truncate

find 宏尺源. -size +c -exec 困蘆truncate {} –size 0 蔽態(tài)\;

linux exec 輸出的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux exec 輸出,「深入了解 Linux exec 輸出」,【exec】shell腳本中的 exec 命令,linux的find -exec命令的問題的信息別忘了在本站進行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


文章名稱:「深入了解Linuxexec輸出」(linuxexec輸出)
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/dpddcgo.html