Убить фоновый процесс python gitlab-ci

Я пытаюсь убить задание python, запущенное в фоновом режиме в докере Alpine в gitlab-ci:

Питон

import asyncio

def main():
    loop = asyncio.get_event_loop()
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        print('Stopping')


if __name__ == '__main__':
    main()

Вот команды, которые выполняются.

$ COVERAGE_FILE=.coverage.test coverage run test.py &
$ TEST_PID=$!
$ echo "${TEST_PID}"
26
$ kill -SIGINT ${TEST_PID}
$ jobs -l
[1]+  26 Running                 
$ kill -9 ${TEST_PID}
$ jobs -l
[1]+  26 Running                 

Я никогда не вижу .coverage.test, так как работа никогда не заканчивается. Однако, похоже, он работает нормально, когда я запускаю команды локально.


person Orelus    schedule 14.03.2019    source источник
comment
Возможный дубликат Как отправить SIGINT на Python из скрипта bash?   -  person Arne    schedule 15.03.2019
comment
Я видел и пробовал выше; это не сработало для меня   -  person Orelus    schedule 15.03.2019


Ответы (1)


Наконец нашел решение:
- Сначала добавьте signal.signal(signal.SIGINT, quit_gracefully) как уже упоминалось здесь.
- Затем добавьте команду wait после kill:

COVERAGE_FILE=.coverage.test coverage run test.py &
TEST_PID=$!
kill -SIGINT ${TEST_PID}
wait
person Orelus    schedule 15.03.2019