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脚本是单进程模型。

转载注明出处。

时间: 2024-11-03 21:13:45

linux下通过命令启动多个终端运行对应的命令和程序的相关文章

linux下通过命令启动多个终端执行相应的命令和程序

    作者:张昌昌 在一些情况下,往往需要同时启动多个终端并让终端执行自动执行相应的命令,进而达到提高操作效率的目的.在linux下gnome-terminal启动终端命令, gnome-terminal -x 后跟执行的命令,bash是linux启动子shell的命令,bash -c "所要执行的命令串",通过嵌套gnome-terminal -x bash -c ......,表示启动新终端, 并在新启动的终端里执行bash -c,即启动子shell,由子shell执行-c后面的

oracle linux下oracle 10g启动EM、isqlplus及相关命令语法

转载:http://hancang2000.blog.sohu.com/139239421.html ORACLE_HOME/bin/emctl start dbconsole $ORACLE_HOME/bin/isqlplusctl start emctl常用命令语法: emctl start dbconsole启动EM console服务,使用前需要先设置ORACLE_SID环境变量 emctl stop dbconsole停止EM console服务,使用前需要先设置ORACLE_SID环

Linux 下Tomcat的启动、关闭、杀死进程

Linux下Tomcat的启动.关闭.杀死进程 打开终端 cd /java/tomcat #执行 bin/startup.sh #启动tomcat bin/shutdown.sh #停止tomcat tail -f logs/catalina.out #看tomcat的控制台输出: #看是否已经有tomcat在运行了 ps -ef |grep tomcat #如果有,用kill; kill -9 pid #pid 为相应的进程号 例如 pe -ef |grep tomcat 输出如下 sun 5

Linux下,Tomcat启动成功,发现ip:8080访问失败

Linux下,Tomcat启动成功,发现ip:8080访问失败 Chasel_H 2018.04.23 20:47* 字数 195 阅读 566评论 0喜欢 3 相信很多人都和我一样,在Linux环境下安装Tomcat并成功启动却没法通过ip:8080却没有访问成功,其实原因是因为Linux防火墙默认是关闭的. 若想成功访问,有两种方法:一是关闭防火墙,另外就是让防火墙开放这个端口. (1)关闭防火墙: 在终端执行  service iptables stop  命令 ,但我们不推荐使用此方式

linux下memcached的启动/结束的方式

当前项目中,linux下memcached的启动/结束的方式 默认情况下memcached安装到/usr/local/bin下. 进入安装目录,启动memcached:/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -u root 获取运行状态:echo stats | nc localhost 11211(可以查看出pid) 或使用ps -ef|grep memcached 停止memcached:kill -9 pid  (-9表

早上在linux下用selenium启动Chrome时出现问题:

早上在linux下用selenium启动Chrome时出现问题:报错: Traceback (most recent call last): File "get2.py", line 62, in <module> browser = webdriver.Chrome() File "/root/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages/selenium/webdriver/chrome

Linux下的压缩(zip)解压(unzip)缩命令

1.zip命令zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip命令unzip -o -d /home/sunny myfile.zip把myfile.zip文件解压到 /home/sunny/-o:不提示的情况下覆盖文件:-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下: 3.其他zip -d myfile.zip smart.txt删除压缩文件中sma

Linux下实现MySQL多端口多实例运行

声明 作者:昨夜星辰 博客:http://yestreenstars.blog.51cto.com/ 本文由本人创作,如需转载,请注明出处,谢谢合作! 目的 Linux下实现MySQL多端口多实例运行. 主要操作 创建/etc/my_multi.cnf文件 vi /etc/my_multi.cnf 内容如下(注意!如果你的MySQL是通过源代码方式安装,请根据实际情况更改mysqld和mysqladmin这两项,还有就是注意更改root的密码.) [mysqld_multi] mysqld = 

Linux下Oracle的启动和关闭

默认情况下,Linux下Oracle是不会随系统自动启动的. 1.启动Oracle 1.以oracle账户登录到CentOS,或者切换到oracle用户权限 # su – oracle  2.然后输入: $ sqlplus "/as sysdba" 3.原本的画面会变为 SQL> 4.最后输入starup启动数据库 SQL> startup 2.检查Oracle监听以及启动监听器 1.使用exit命令,退出上述的sqlplus环境回到终端界面.  2.在终端界面输入: $