Как показать фоновые задания в оболочке, скрытые &

Я запускаю веб-сервер одним Makefile командой make install

Содержимое 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 install или sudo /etc/init.d/fhttpd.init start, jobs ничего не показывает. На самом деле сервер работает корректно. Я просто не знаю, как это работает, потому что я использую & в /etc/init.d/fhttpd.init.

Я не знаю, почему я не могу использовать «работы» с makefile. И как я могу вернуть фоновую программу в этом случае.


person Weiheng Li    schedule 08.02.2017    source источник
comment
Сценарий инициализации выполняется в другой оболочке, поэтому его задания не будут видны в вашей оболочке. Вы можете использовать другой инструмент, например pgrep, чтобы убедиться, что сервер работает.   -  person glenn jackman    schedule 09.02.2017
comment
Знаете ли вы, если я хочу увидеть его состояние, как переключиться?   -  person Weiheng Li    schedule 09.02.2017
comment
Вы не можете получить доступ к оболочке, которая запустила сервер. Он больше не работает. Я ожидал, что fhttpd status что-то сделает   -  person glenn jackman    schedule 09.02.2017
comment
Спасибо, это проект, который мы можем каким-то образом использовать для сбоя сервера. Как я могу увидеть, если он падает?   -  person Weiheng Li    schedule 09.02.2017
comment
Попробуйте прочитать логи сервера   -  person glenn jackman    schedule 09.02.2017
comment
Это один код самостоятельной записи. Не об апаче и может не иметь журнала. Я просто хочу увидеть статус программы веб-сервера.   -  person Weiheng Li    schedule 09.02.2017


Ответы (1)


Я ожидаю, что эта команда поднимет выполнение до пользовательского пространства суперпользователя:

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

В результате вы не увидите этот процесс у своего обычного пользователя lhu343ai. Вместо этого вы хотите проверить jobs для суперпользователя. Например, sudo jobs будет командой, которую вы ищете...

Обратите внимание, что это не вопрос программирования и уж точно не о C. У нас достаточно низкоуровневого шума, рассылаемого по этому тегу от людей, путающих ассемблер x86. понятия с C, как есть.

person autistic    schedule 09.02.2017