C ++: остановка службы RPC - PullRequest
0 голосов
/ 15 марта 2011

из моего источника C ++, я запускаю службу RPC, вызывая svc_run().Все выглядит отлично, и я вижу, что моя служба работает, если я набираю rpcinfo -p в своем терминале.

Сейчас я работаю над функцией очистки, которая должна остановить эту службу и удалить ее из rpcinfo -pсписок.

Как я могу это сделать?На данный момент я могу остановить его только с помощью sudo rpcinfo -d program version в моем терминале.Как я могу сделать это из моего исходного файла?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 21 сентября 2017

«Лучшее» решение - использовать вместе решение DevCpp и Danilo:

  • Среди функций RPC вашего сервера определите одну функцию, которая при вызове клиентом выполняет svc_exit (),Это позволит вашему RPC-серверу вернуться из цикла svc_run ().Теперь вы можете расширить клиентское приложение RPC или создать отдельное клиентское приложение для завершения работы вашего сервера.
  • В основной программе вашего RPC-сервера сразу после вызова svc_run () выполните команду pmap_unset (PROGID, VERSION);».Это позволит rpcbind отменить регистрацию вашего RPC-адреса.
  • Затем выполните обычную очистку вашего приложения.

Эта комбинация позволяет вашему RPC-серверу работать как демон, т.е. без взаимодействия с пользователем,по-прежнему предлагая чистый выход без необходимости отмены процесса.

0 голосов
/ 29 сентября 2015

Попробуйте использовать функцию void svc_exit(void).Для более подробного описания, пожалуйста, обратитесь к главе rpc_svc_calls.

0 голосов
/ 10 октября 2016

Я попытался принудительно остановить svc_run (), но не нашел решения, однако я сделал остановку svc_run () из зарегистрированной функции, а затем остановил - возможно, это могло бы помочь вам - пожалуйста, посмотрите на это: подпрограмма svc_exit

0 голосов
/ 24 марта 2011

Через некоторое время я узнал, как это сделать.На самом деле я столкнулся с некоторыми неожиданными трудностями.Стандартный способ сделать это - использовать следующее:

svc_unregister(PROGID, VERSION)

, но почему-то у меня это не сработало.После большого количества проб и некоторой онлайн-справки (http://www.spinics.net/lists/linux-nfs/msg05619.html) мне удалось удалить службу RPC, позвонив по номеру:

pmap_unset(PROGID, VERSION);

Надеюсь, это поможет:)

...