启动本地PHP服务器后终端无法切换目录,是否必须退出服务器?
我在终端执行cd project后,进入了如下状态:
MacBook-Pro:project work$
接着我通过以下命令启动了本地PHP开发服务器:
MacBook-Pro:project work$ php -S 127.0.0.1:8000 -t public
服务器启动后显示:
PHP 7.2.6 Development Server started at Tue May 29 10:45:40 2018 Listening on http://127.0.0.1:8000 Document root is /Users/work/project/public Press Ctrl-C to quit.
这时候我尝试执行cd或cd project命令都没有任何反应,只有按下Ctrl-C退出服务器后,才会重新出现MacBook-Pro:project work$提示符。请问是否必须退出服务器才能切换目录?
不用必须退出服务器就能切换目录的,这是因为你当前的终端会话被PHP开发服务器占用了——服务器在前台运行时会持续监听请求,终端此时会优先处理服务器的输出和运行状态,自然不会响应你的命令输入。
给你几个实用的解决办法:
后台运行服务器
启动服务器的时候在命令末尾加上&,让它在后台运行:php -S 127.0.0.1:8000 -t public &这样终端会立刻回到命令提示符状态,你可以正常执行
cd等命令。如果需要停止后台的服务器,用fg命令把它调回前台,再按Ctrl-C退出;或者先用ps aux | grep php找到进程ID,再用kill [进程ID]终止进程。打开新的终端窗口/标签页
直接新开一个终端会话,在新窗口里执行cd project或者其他目录切换命令,原来的终端窗口保持服务器运行即可。这是最直观也最常用的方式,不用折腾后台进程的操作。使用终端多路复用工具(进阶)
比如安装tmux或者screen这类工具,它们可以在同一个终端窗口里创建多个会话面板。你可以在一个面板里运行服务器,切换到另一个面板执行目录操作,不用开多个终端窗口,适合习惯高效操作的开发者。
简单来说,前台运行的进程会占据当前终端的输入焦点,只要让服务器不占用当前会话的焦点,你就能正常执行目录切换命令啦~
内容的提问来源于stack exchange,提问作者peace_love

