如何在 shell 中显示隐藏的后台作业 &



我通过命令make install运行一个Makefile网络服务器

Makefile的内容是

project : webserver.c
webserver.c : server/webserver.c
    gcc -g  -D_FORTIFY_SOURCE=0 -frecord-gcc-switches -fno-stack-protector -g  -o server/webserver -lpthread  -lnsl -lresolv -D_TS_ERRNO server/webserver.c
install :
    sudo /etc/init.d/fhttpd.init stop
    sudo cp server/webserver /usr/local/fhttpd/fhttpd
    sudo chmod 4755 /usr/local/fhttpd/fhttpd
    sudo /etc/init.d/fhttpd.init start
clean : 
    rm server/webserver 

fhttpd.init 的内容是

httpd="/usr/local/fhttpd/fhttpd"
prog=fhttpd
port=8080
RETVAL=0
# disable ASLR so that lab exercise will work reliably
echo 0 > /proc/sys/kernel/randomize_va_space
start() {
                echo "Stopping $prog..."
                killall $prog
        echo -n $"Starting $prog: "
        $httpd $port &
}
stop() {
        echo -n $"Stopping $prog: "
        killall $prog
}
# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        start
        ;;
  reload)
          start
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart}"
        exit 1
esac
exit $RETVAL

我想 init 使用&使服务器在后台运行。但是在我使用该命令之后。我使用jobs命令显示我的所有工作,我看不到任何东西。但是如果我直接运行它,就像这样

lhu343ai@server:~$ /usr/local/fhttpd/fhttpd 8080 &
[1] 7154
lhu343ai@server:~$ jobs
[1]+  Running                 /usr/local/fhttpd/fhttpd 8080 &

对我来说一切都很好。

如果我只使用make installsudo /etc/init.d/fhttpd.init startjobs什么也没显示。实际上,服务器运行正常。我只是不知道它是如何工作的,因为我在/etc/init.d/fhttpd.init 中使用&

我不知道为什么我不能将"工作"与makefile一起使用.在这种情况下,我如何才能恢复后台程序。

我希望此命令将执行提升到超级用户的用户空间:

sudo /etc/init.d/fhttpd.init start

因此,您不会在普通用户中看到该过程,lhu343ai .相反,您需要检查超级用户的jobs。例如,sudo jobs将是您要查找的命令...

请注意,这不是一个编程问题,当然也不是关于 C 的问题。我们有足够多的低级噪音来自那些将 x86 汇编概念与 C 混淆的人,就像它一样。

最新更新