我知道从命令行启动的任何进程都附加到命令行进程,所以当我关闭终端时,从该 shell 进程启动的任何进程都将被终止。
所以如果我想启动一个模拟器
emulator -av emu1 -ports 5000,5000 &
它会创建后台模拟器进程,但如果我关闭终端,模拟器仍然会死亡。
我如何启动模拟器,以便在关闭终端后模拟器不会被杀死?
谢谢
答案1
为了防止从终端启动的任何进程在启动该进程的终端关闭时被终止,您需要在模拟器命令前添加禁止或者设置。
禁止是 no hang-ups 的缩写,你可能希望将输出重定向到 /dev/null,否则它会生成一个禁止运行文件。末尾的 & 符号使命令作为后台进程运行。用法示例:
$ nohup ./emulator -avd Nexus_5X_API_29_x86 >/dev/null &
设置在新的会话中运行进程或程序,防止在启动该进程或程序的终端关闭时将其终止。使用示例:
$ sudo setsid ./emulator -avd Nexus_5X_API_29_x86
注意:在我的系统上,我必须先进入〜/ Android的/ SDK /模拟器运行模拟器,以防任何人尝试从命令行直接运行模拟器并收到未找到命令的错误。
请参阅手册页禁止或者设置了解更多信息。
答案2
您可以尝试使用screen
。如果尚未安装,请安装
sudo apt install screen
开始屏幕
screen
屏幕会话启动后,发出命令
emulator -av emu1 -ports 5000,5000
按下ctrl+a然后d
退出终端并打开一个新终端进行验证。重新连接正在运行的会话
screen -r
答案3
从终端启动 Android 模拟器,这样关闭终端后它就不会被杀死。
如果我们在行末使用“&”符号启动 Android 模拟器,则在关闭终端后它将自行终止。为了解决这个问题,我们可以使用screen
特殊参数-dm
screen -dm emulator <emulator parameters>
如果没有安装屏幕:sudo install screen
来自手册页
-dm 以“分离”模式启动屏幕。这将创建一个新会话,但不会附加到它。这对于系统启动脚本很有用。
最初,这个命令是由@Misantorp,作为对他的回答的评论。