導航:首頁 > 編程系統 > linuxexec輸出

linuxexec輸出

發布時間:2023-02-03 05:36:25

linux下怎麼調用命令並獲取輸出結果和返回值

因為有shell pipe。看這個例子: String[] cmd = {"/bin/sh","-c","ls /etc | grep release"};Process p = Runtime.getRuntime().exec(cmd);

Ⅱ linux的exec是什麼意思

前三個和最後一個是兩個類型。前三個主要是Linux用來創建新的進程(線程)而設計的,exec()系列函數則是用來用指定的程序替換當前進程的所有內容。所以exec()系列函數經常在前三個函數使用之後調用,來創建一個全新的程序運行環境。Linux用init進程啟動其他進程的過程一般都是這樣的。下面說fork、vfork和clone三個函數。這三個函數分別調用了sys_fork、sys_vfork、sys_clone,最終都調用了do_fork函數,差別在於參數的傳遞和一些基本的准備工作不同。可見這三者最終達到的最本質的目的都是創建一個新的進程。在這里需要明確一下,Linux內核中沒有獨立的「線程」結構,Linux的線程就是輕量級進程,換言之基本控制結構和Linux的進程是一樣的(都是通過struct task_struct管理)。fork是最簡單的調用,不需要任何參數,僅僅是在創建一個子進程並為其創建一個獨立於父進程的空間。fork使用COW(寫時拷貝)機制,並且COW了父進程的棧空間。vfork是一個過時的應用,vfork也是創建一個子進程,但是子進程共享父進程的空間。在vfork創建子進程之後,父進程阻塞,直到子進程執行了exec()或者exit()。vfork最初是因為fork沒有實現COW機制,而很多情況下fork之後會緊接著exec,而exec的執行相當於之前fork復制的空間全部變成了無用功,所以設計了vfork。而現在fork使用了COW機制,唯一的代價僅僅是復制父進程頁表的代價,所以vfork不應該出現在新的代碼之中。在Linux的manpage中隊vfork有這樣一段話:It is rather unfortunate that Linux revived this specter from the past. The BSD man page states: "This system call will be eliminated when proper system sharing mechanisms are implemented. Users should not depend on the memory sharing semantics of vfork() as it will, in that case, be made synonymous to fork(2)."clone是Linux為創建線程設計的(雖然也可以用clone創建進程)。所以可以說clone是fork的升級版本,不僅可以創建進程或者線程,還可以指定創建新的命名空間(namespace)、有選擇的繼承父進程的內存、甚至可以將創建出來的進程變成父進程的兄弟進程等等。clone和fork的調用方式也很不相同,clone調用需要傳入一個函數,該函數在子進程中執行。此外,clone和fork最大不同在於clone不再復制父進程的棧空間,而是自己創建一個新的。關於Linux命令的介紹,看看《linux就該這么學》,具體關於這一章地址3w(dot)linuxprobe/chapter-02(dot)html

Ⅲ Linux 命令:exec

命令簡介
exec 命令用於調用並執行指定的命令。

exec 命令通常用在 Shell 腳本程序中,可以調用其他的命令。如果在當前終端中使用命令,則當指定的命令執行完畢後會立即退出終端。

-c #在空環境中執行指定的命令
-l #在傳遞給command的第零個arg的開頭放置一個破折號
-a #Shell將name作為第零個參數傳遞給command

輸出指定信息

其它總結

Ⅳ linux下exec函數不返回結果

不知道你這里的exec是不是php裡面的還是系統bash內置的。
如果是php的
這是語法
string exec ( string $command [, array &$output [, int &$return_var ]] )
command

The command that will be executed.
output

If the output argument is present, then the specified array will be filled with every line of output from the command. Trailing whitespace, such as \n, is not included in this array. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec().
return_var

If the return_var argument is present along with the output argument, then the return status of the executed command will be written to this variable.

Return Values

The last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

To get the output of the executed command, be sure to set and use the output parameter.
意思就是說輸出和返回 都是可選參數,你要指定了才有!!
具體的你查看一下php手冊,一貼網址就不顯示了

Ⅳ linux下exec 函數第一個參數和第二個參數的區別

哪裡寫的這些...好亂阿..

先解釋下基本的:

int main(argc,char * argv[])
main的參數,就是命令行參數.

比如你的可執行文件是test,你希望在程序執行時傳入IP地址,那麼可以這樣:

./test 127.0.0.1

此時,argc =1,argv[1]是就是指向"127.0.0.1"指針(命令參數全部當作字元串來處理的)。
而 argv[0]就代表第一個參數,這里對應的就是"./test"。
argc和argv在mian裡面都是可以使用的,出了main的范圍就不能使用了。

再來說你提出的第一個地方,exec的問題。

exec實際上包含了一組函數,execl, execlp, execle, execv, execvp, execvpe
具體使用方法,你man execv就可以得到這些函數的使用方法。

exec函數的作用是,產生一個新進程,結束當前進程(具體執行的操作是復制當前進程的一部分數據和許可權,然後根據參數啟動一個新的進程)。

exec這組函數執行時候,需要提供的參數包括:一個可執行程序的路徑,傳遞給可執行程序的參數。(這里的參數,與剛才說到的main的參數含義相同。)

說到這里應該明白了吧...就一個。

我不知道你要hello world干什麼...照你意思給寫了個.

第一個,就是你貼出來的代碼改動一點點(我這邊運行有點問題):

#include <stdio.h>
main(int argc,char* argv[])
{
int i=0
while(i<=argc)
{
printf("arguement %d : %s ",i,argv[i]);
printf("\n");
i++;
}
}

運行程序:
$gcc test.c -o test
$./test hello world
輸出結果:
[ksl@myhost WGX]$ ./test hello world
Arguement 0:./test
Arguement 1:hello
Arguement 2:world
Arguement 3:(null)

然後第二個,使用exec的例子,我用execl吧..
文件名是test1.c

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

void main(int argc,char *argv[])
{
printf("This is not exec...");

execl("./test","hello","world",NULL);

//如果exec執行正常,下面的printf將不會被執行
//因為當前進程已經結束,./test將被執行
printf("exec error");
}

輸出結果:
[ksl@myhost WGX]$ ./test1
Arguement 0:hello
Arguement 1:world
Arguement 2:(null)

後者並沒輸出"./test"....就是exec啟動的程序,其命令行參數中只有參數.(我也不曉得原因...=.=||)

Ⅵ linux exec函數族的問題

第一行:輸出抄「child process:pid=(函數getpid返回的數值襲)」;
第二行://(此行已被注釋)打開位置在/bin/ls參數為-a。-l,名為fork.c的文件替換所有進程
第三行://(此行已被注釋)自動搜索有ls的地址,打開參數為-a。-l,名為fork.c的文件替換所有進程
第四行:將要執行的文件參數存入一個數組(因為要用在execvp中,所以數組最後一個元素必為NULL)
第五行:自動搜索有ls的地址並以數組中的參數打開文件(fork.c),若打開成功則系統所有進程被打開該文件的進程替換,此行後面所有代碼將不再運行,若打開失敗,會有返回值-1,並且繼續按原來代碼執行。
第六行:能執行到第六行說明打開失敗,列印出「"error exec」並在下面一行顯示錯誤原因。
第七行:跟第一行一模一樣。

Ⅶ shell腳本中的 exec 命令

  exec執行命令時,不會啟用新的shell進程。
  source和 .也不會啟用新的shell進程,在當前shell中執行,設定的局部變數在執行完命令後仍然有效。
  bash或sh執行時,會另起一個子shell進程,其繼承父shell進程的環境變數,其子shell進程的變數執行完後不影響父shell進程。
  exec是用被執行的命令行替換掉當前的shell進程,且exec命令後的其他命令將不再執行。
  例如在當前shell中執行 exec ls 表示執行ls這條命令來替換當前的shell ,即為執行完後會退出當前shell。
  為了避免父shell被退出,一般將exec命令放到一個子shell腳本中,在父sehll中調用這個子shell腳本,調用處可以用bash xx.sh(xx.sh為存放exec命令的腳本),這樣會為xx.sh建立一個子shell去執行,當執行exec後該子shell進程就被替換成相應的exec的命令。

  其中有一個例外:當exec命令對文件描述符操作的時候,就不會替換shell,而是操作完成後還會繼續執行後面的命令!
文件描述符
shell中描述符一共有12個
0 代表標准輸入
1 代表標准輸出
2 錯誤輸出
其他 3-9 都是空白描述符

其含義是: 復制標准輸出到3 ,錯誤輸出到 4 ,把 3 4 保存在bash.log 這個文件中。

其含義是:將bash.sh腳本執行的標准輸出和錯誤輸出追加重定向到 bash.log
如果exec 跟的是其他命令,則其他命令結束後,本shell也隨之停止

可以看到隨著 echo " hello oracle" 這條指令運行完本 整個腳本執行完畢,後面的 echo " hello db2" 沒有執行!

二、Linux shell 腳本中, $@ 和 $@ 分別是什麼意思?

$@ 表示所有腳本參數的內容

$# 表示返回所有腳本參數的個數

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

說明:給腳本提供了兩個參數,所以 @代表了參數的內容!

怎麼理解shell腳本中 exec "`dirname "$0"`/node""$0" "$@" ?
$0            #腳本自己的路徑
"`dirname "$0"`"/node    #腳本目錄下的node程序的路徑
$@            #腳本被執行時的命令行參數

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

exec scala "$0" "$@" 是什麼意思
這是bash語法。
$0          #表示當前腳本的名字
$@          #表示當前腳本執行的所有參數
exec scala "$0" "$@"   #表示用scala命令,帶參數,執行當前腳本

$0 是位置參數,表示腳本名稱

$1 表示腳本的第一個參數,依次類推直到 $9

exec用於執行命令、或腳本、或外部可執行程序,會新建一個shell去執行

綜上,這里exec sh "$0" 就是執行腳本本身

所以,就是一個循環過程,每隔兩秒列印一次 Hello

Ⅷ 【exec】shell腳本中的 exec 命令

exec 是 bash 的內置命令

shell 的內件命令exec執行命令時,不啟用新的shell進程。

source 和 . 不啟用新的shell,在當前shell中執行,設定的局部變數在執行完命令後仍然有效。

bash 或 sh 或 shell script 執行時,另起一個子shell,其繼承父shell的環境變數,其子shelll的變數執行完後不影響父shell。

exec是用被執行的命令行替換掉當前的shell進程,且exec命令後的其他命令將不再執行。

例如在當前shell中執行 exec ls  表示執行ls這條命令來替換當前的shell ,即為執行完後會退出當前shell。

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

其中有一個例外:當exec命令對文件描述符操作的時候,就不會替換shell,而是操作完成後還會繼續執行後面的命令!

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

文件描述符

shell中描述符一共有12個

0  代表標准輸入

1  代表標准輸出

2  錯誤輸出

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

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

其含義是: 復制標准輸出到3 ,錯誤輸出到 4 ,把 3 4 保存在bash.log 這個文件中。

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

其含義是:將bash.sh腳本執行的標准輸出和錯誤輸出追加重定向到 bash.log

如果exec 跟的是其他命令,則其他命令結束後,本shell也隨之停止

#  cat test_exec.sh

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

#!/bin/bash  



echo "Hello mysql"  

exec echo "Hello oracle"  

echo "Hello sqlserver"

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

可以看到隨著 echo " hello oracle"  這條指令運行完本 整個腳本執行完畢,後面的 echo " hello db2" 沒有執行!

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

$@  表示所有腳本參數的內容

$# 表示返回所有腳本參數的個數

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

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

#!/bin/sh

echo "number:$#"

echo "argume:$@"

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

執行腳本:

./test.sh first_arg  second_arg

說明:給腳本提供了兩個參數,所以$#輸出的結果是2,$@代表了參數的內容!

怎麼理解shell腳本中  exec "`dirname "$0"`/node""$0"  "$@" ?

$0                                      # 腳本自己的路徑

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

$@                                    # 腳本被執行時的命令行參數

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

exec scala "$0" "$@"是什麼意思

這是bash語法。

$0  表示當前腳本的名字

$@  表示當前腳本執行的所有參數

exec scala "$0" "$@"    表示用scala命令,帶參數,執行當前腳本

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

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

#!/bin/sh

echo  "Hello!"

sleep 2

execsh "$0"

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

$0   是位置參數,表示腳本名稱

$1   表示腳本的第一個參數,依次類推直到$9

exec用於執行命令、或腳本、或外部可執行程序,會新建一個shell去執行

綜上,這里exec sh  "$0"  就是執行腳本本身

所以,就是一個循環過程,每隔兩秒列印一次 Hello

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

#!/bin/sh

echo  "Hello!"

sleep 2

exec   "$0"

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

閱讀全文

與linuxexec輸出相關的資料

熱點內容
數據科學考研的專業科目是什麼 瀏覽:850
編程怎麼做到場景移動 瀏覽:166
配音秀草稿箱文件夾 瀏覽:642
丟失隱私文件怎麼恢復 瀏覽:187
怎麼收集數據表格 瀏覽:199
java登錄校驗碼 瀏覽:967
ug星空自動編程字體怎麼改 瀏覽:544
桌面文件大文件刪除後可否恢復 瀏覽:153
蘋果如何安裝dmg文件 瀏覽:427
java組件技術 瀏覽:909
java定義一個空數組 瀏覽:200
win10安全等級降低 瀏覽:305
編程哪個國家比較好 瀏覽:518
linux文件偏移量 瀏覽:205
工行app怎麼看這個月要還款 瀏覽:582
ps1模擬器能讀取bin文件嗎 瀏覽:857
6150se顯卡升級 瀏覽:263
編程錯誤提示語有哪些 瀏覽:535
如何恢復硬碟丟失的數據 瀏覽:490
蘋果官換機6sp能買嗎 瀏覽:786

友情鏈接