本文主要介绍在Linux下运行程序,及在前台和后台之间切换与控制的方法。
前台运行程序
通常的运行方法是:./a.out
,表示运行当前目录下的可执行程序,并运行在前台。
运行在前台指的是当前终端窗口会暂停接受其他指令,而处于a.out的运行状态。当关闭当前终端窗口时,程序也会被关闭。
注意,不管运行在前台还是后台的程序,如果有输出到终端的程序指令,如cout, cerr
等,都会在运行的终端上输出。
后台运行程序
程序运行在后台时,当前终端可以接受其他指令。
运行后台程序的方法有两种:
- 在运行程序指令的最后加上符号:
&
,如./a.out&
。注意,此程序仍依赖于当前终端,如果终端关闭,程序也会退出。 - 使用nohup命令:
nohup ./a.out&
。该指令不依赖于终端,即使终端关闭,程序仍在后台运行。如果标准输出是终端,会写入nohup.out
文件,如果标准错误是终端,会重定向到标准输出。
查看后台程序
两种方式:
jobs -l
,-l
参数显示PID,前面的序号标识进程序号,+
号表示当前任务,-
号表示下一个任务。注意,该命令只能查看当前终端的后台任务,在其他终端启动的后台任务不可见。ps aux
,查看所有运行的程序。
进程的前后台切换
前台到后台运行
如果程序已经在前台运行,不想关闭程序并重新启动,可以执行以下步骤:
ctrl + z
bg %进程序号
第一步是将一个正在前台执行的程序放到后台,并处于暂停状态。第二步是继续运行一个后台暂停的程序,如果只有一个程序,可省略参数。
后台程序到前台
查看到后台程序的进程序号后,使用fg %进程序号
即可。如果只有一个程序,可省略参数。
关闭正在运行的程序
对于前台程序,可直接在终端上按下ctrl + c
关闭当前程序。
对于后台程序,有以下方法:
- 先通过ps查看进程号,再
kill -9 pid
,-9
参数可省略,默认信号即可(前提是进程未捕获该信号,下同)。 killall a.out
- 先通过jobs查看进程序号,再
kill %进程序号
- 根据程序对信号的处理情况,发送相应信号。