这不是一个问题,更多的是一个好奇的问题。当我使用命令行打开 Atom 编辑器时,atom
它会在后台打开。(所以我立即返回到终端中的命令提示符。)通常,如果我使用命令行打开应用程序,applicationname
它会在前台运行。如果我想在后台运行它(我通常会这样做),我会applicationname &
改为提供。
我为什么不必这么做atom &
?
就像我说的,这不是问题,因为我通常想继续在同一个目录中工作,但我很好奇为什么。
$ file $(which atom)
/usr/bin/atom: Bourne-Again shell script, ASCII text executable/usr/bin/atom: Bourne-Again shell script, ASCII text executable
答案1
您不必atom
在后台启动,因为此命令不会atom
直接启动进程,而只是启动一个启动脚本。该/usr/bin/atom
脚本在启动之前评估 CLI 选项并设置一堆变量真实的 atom
过程在后台子 shell 中,参见第 180 行以下各行(我的注释):
# start a subshell in the background (note “&” below!)
(
# start the Atom process with the current script’s PID redirecting its output to nohup.out
nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/nohup.out" 2>&1
# in case of any error, print the output and exit
if [ $? -ne 0 ]; then
cat "$ATOM_HOME/nohup.out"
exit $?
fi
) &
让我们看看哪个文件是atom
这里启动的真正可执行文件:
它开始
$ATOM_PATH
于第 163 行:ATOM_PATH="$USR_DIRECTORY/share/atom/atom"
$USR_DIRECTORY
在第 150 行设置:USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
这等于:
USR_DIRECTORY=$(readlink -f $(dirname /usr/bin/atom)/..) # equals USR_DIRECTORY=$(readlink -f /usr/bin/..) # equals USR_DIRECTORY=$(readlink -f /usr) # equals USR_DIRECTORY=/usr
现在我们有了可执行文件的完整路径atom
:/usr/share/atom/atom
。的输出file
证实:
$ file /usr/share/atom/atom
/usr/share/atom/atom: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, stripped