Я хотел бы изящно убить экземпляр rosbag
через терминал. В этом случае изящно означает, что файл rosbag
не имеет суффикса .active после kill.
поэтому я делаю следующее с терминала, чтобы отправить рекомендуемый SIGINT
в rosbag:
$ rosbag record /some/topic &
$ RPID=$!
$ # do some stuff
$ kill -2 $RPID
К сожалению, сумка остается активной и может случиться так, что не все было сохранено на диск. Однако, если я помещу rosbag в файл запуска, он, похоже, сработает:
$ roslaunch rosbag_record.launch &
$ LPID=$!
$ # do some stuff
$ kill -2 $LPID
Теперь rosbag остался нетронутым и был сохранен без суффикса active.
Теперь интересный вопрос, что я делаю не так в первом случае. Я думаю, что удаление файла запуска, и в данном случае уничтожение roscore, вызывает ros::shutdown()
, что вызывает SIGINT
во всех процессах. Но ручной способ с использованием kill
, похоже, ведет себя по-другому.