linux下通过命令启动多个终端执行相应的命令和程序
时间:2014-06-22 05:13 来源:linux.it.net.cn 作者:IT网
在一些情况下,往往需要同时启动多个终端并让终端执行自动执行相应的命令,进而达到提高操作效率的目的。在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脚本是单进程模型。
(责任编辑:IT)
在一些情况下,往往需要同时启动多个终端并让终端执行自动执行相应的命令,进而达到提高操作效率的目的。在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脚本是单进程模型。 (责任编辑:IT) |