nohup、&、重定向(服务器后台任务提交)

笔者现在有一个需要执行大概300小时CPU时间的湍流算例(改并行还很麻烦只能先跑单核看看结果对不对),之前在服务器上跑程序都是直接类似PC跑程序一样./a.out运行。但是这样关闭shell之后,服务器会自动kill算到一半的程序,程序执行中途网络还不能中断。所以这个新的程序就需要进行后台提交,此处记录一下网上学习到的内容。

nohup 和 &

首先使用这两个命令就能将最简单的程序放到后台计算了,命令如下:

nohup ./a.out &

回车之后,终端会输出一个进程号:
在这里插入图片描述
这里的36010就是进程号了。然后来解释一下这两个命令分别的作用。

首先&是指在后台运行,./a.out &也能够执行,回车之后也会返回一个进程号,但是这个进程在关闭终端之后会被kill掉。

第二个命令就是nohup,为no hang up的缩写,意思就是不挂断的运行。两者组合使用后,相当于直接在后台挂上了一个不会挂断的程序。另外还输出了一行字:

nohup: ignoring input and redirecting stderr to stdout

意为忽略输入,并将stderr输出到stdout,就是把终端本来应该显示的输出输出到指定的文件中。如果不进行重定向直接用命令nohup ./a.out &,输出结果为

nohup: ignoring input and appending output to 'nohup.out'

就是同样忽略输入,并将输出保存到nohup.out中。

重定向

重定向是将程序的输出导入到文件中,或将文件的文本导入到程序中。使用方法主要通过指令><,前者是将输出保存,后者是导入文件。例如

nohup ./a.out >logout &

是挂起的同时,指定输出到文件logout中。当然这个用法也适用于其他命令,比如说:

ls > list.txt

是将ls命令的输出导入到list.txt文本中。重定向也可以导入文本,但是此处的导入是指,当程序运行需要终端交互时的情形,比如说程序中有:

scanf("%d%d",&a,&b);

此时,创建一个文本data.txt

2 3

就可以用:

./a.out < data.txt

避免直接的输入。

此处强调一点,笔者的程序需要先从当前文件夹内读取网格数据和控制参数,这一步骤并不是前面提到的终端交互输入的数据,并不需要写成类似如下的形式,否则会报错:

nohup ./a.out <control.in Mesh2d.dat >logout &

最后,报错结果也可以存储,要使用2>,例如:

nohup ./a.out  >logout  2>/dev/null

意为一般的输出保存在logout中,报错的输出就不要了23333

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值