В UNIX-y я пытаюсь запустить процесс, установить его фон и связать время жизни этого процесса с моей оболочкой.
То, о чем я говорю, это не просто фон процесса, я хочу, чтобы процесс был отправлен SIGTERM, или чтобы у него был открытый дескриптор файла, который закрыт, или что-то когда оболочка завершает работу, чтобы пользователю оболочки не приходилось явно завершать процесс или получать предупреждение «у вас запущены задания».
В конечном итоге мне нужна программа, которая может уникальным образом запускаться для каждой оболочки и переносить состояние вместе с этой оболочкой и закрываться при закрытии оболочки.
Консольные команды IBM DB2 работают таким образом. Когда вы подключаетесь к базе данных, она порождает процесс "db2bp", который переносит состояние базы данных и соединение и связывает его с вашей оболочкой. Вы можете подключиться к нескольким различным терминалам или ssh-соединениям, каждое со своим собственным процессом db2bp, и когда они закрыты, соответствующий процесс db2bp умирает и это соединение закрывается.
Запросы DB2 затем запускаются командой db2, которая просто передает ее соответствующему процессу db2bp. Я не знаю, как он взаимодействует с правильным db2bp процессом, но, возможно, он использует устройство tty, подключенное к stdin, в качестве уникального ключа? Думаю, мне тоже нужно это выяснить.
Я никогда не писал ничего, что бы манипулировало tty, поэтому я понятия не имею, с чего начать. Я думаю, что смогу понять остальное, если я смогу просто запустить процесс, который автоматически убивается при выходе из оболочки. Кто-нибудь знает, как это делает DB2?