Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux系統常見問題解答 >> linux下通過命令啟動多個終端執行相應的命令和程序

linux下通過命令啟動多個終端執行相應的命令和程序

日期:2017/1/20 17:42:01      編輯:Linux系統常見問題解答

作者:張昌昌

在一些情況下,往往需要同時啟動多個終端並讓終端執行自動執行相應的命令,進而達到提高操作效率的目的。在linux下gnome-terminal啟動終端命令,

gnome-terminal -x 後跟執行的命令,bash是linux啟動子shell的命令,bash -c "所要執行的命令串",通過嵌套gnome-terminal -x bash -c ......,表示啟動新終端,

並在新啟動的終端裡執行bash -c,即啟動子shell,由子shell執行-c後面的雙引號括起來的命令串。同時為保證gnome-terminal新啟的終端不退出,要在bash -c的命令串後

加bash讓其有一個進程在運行,本例中加的是erl命令,直接進入erl終端,當然不會退出。

c語言版:

#include <unistd.h> 
#include <sys/types.h> 
#include <stdio.h> 
#include <stdlib.h> 
int main(int argc,char * argv[]) 

int count = atoi(argv[1]),i; 
for(i=0;i<count;i++) 

pid_t pid = fork(); 
if(pid == 0) 

//printf("child=%d ",getpid()); 
system("gnome-terminal -x bash -c 'ulimit -n 1000000;cd /home;erl'"); 
exit(0); 


exit(0); 
}

執行 ./a.out 3
該程序采用異步多進程方式,fork子進程,通過system(。。。。)系統調用執行相應的命令,該程序需要注意的是(1)main函數如何帶參數,所帶的參數是從argv[1]開始的,argv[0]默認的參數為“0”,實際上argv數組的長度是外面參數的個數加1;(2)fork出的子進程,照樣會執行for循環,因此為避免此現象發生,fork子進程執行後,exit(0)讓子進程退出,啟動下一個子進程;(3)fork返回值在子進程裡是0,在父進程裡是生成的子進程進程號;(4)c語言的atoi()可以把字符串轉化為整型。

Bash shell版

#!/bin/bash for((i=0;i<$1;i++)) do ((port=2+i)) gnome-terminal -x bash -c "cd /home;ulimit -n 1000000;erl +K true -run io format $port" & done

該腳本更加輕量靈活,注意&是切換到後台運行,防止阻塞當前進程的for的下一次執行,由此可知shell也是多進程模型,而js腳本是單進程模型。

轉載注明出處。
Copyright © Windows教程網 All Rights Reserved