問題如下。 調用一個執行兩件事情的Python程序:連接到rabbitmq服務器並調用產生兩個進程的c程序。由孩子繼承的Python RabbitMQ連接
當python程序結束時,連接仍然建立在負責孩子。
因此,當父母死亡時,孩子會繼承其父資源。
做netstat -putan | grep rabbitmqip
tcp 0 0 localhost:39744 rabbitmqip:5672 ESTABLISHED 25693/child
這是我所得到的,當Python腳本完成。
我會想象在這種情況下連接會丟失。
這似乎與連接到RabbitMQ服務器時發生,我們不能用常規TCP連接重現。
有沒有人有過這個問題?有沒有解決方法?
python代碼將是我的兔子消費者,c程序將是基於工作人員的工作而產生或死亡的背景中的腳本。當我殺死消費者時,我無法建立連接,無論其是否活躍,因爲這樣孩子們就會得到他們在隊列中不能理解的消息。
代碼作爲示例:
的Python:
connection = pika.BlockingConnection(pika.ConnectionParameters(host='RabbitServer'))
print ("Starting Child...")
system("/home/path/test/child")
print ("Done")
兒童節目。
pid_t pstartId, sessionId;
// Fork 1
pstartId = fork();
if (pstartId < 0) {
printf("The System can not create a proccess. \n");
perror("fork");
exit(EXIT_FAILURE);
}
if (pstartId > 0) { exit(EXIT_SUCCESS);}
// Fork 2
pstartId = fork();
if (pstartId < 0) {
printf("The System can not create a proccess. \n");
perror("fork");
exit(EXIT_FAILURE);
}
if (pstartId > 0) {exit(EXIT_SUCCESS);}
if ((sessionId = setsid()) < 0) {
printf("The System can not set a id session. \n");
perror("setid");
exit(EXIT_FAILURE);
}
if (chdir("/") < 0) {
printf("The System can not change dir /. \n");
perror("chdir");
exit(EXIT_FAILURE);
}
while(1){
syslog(LOG_INFO, "I'm a child");
sleep(1);
}
此。 Popen工作。 – Illiax