为什么后台进程在成功执行一段时间后会被中断? (退出代码 248)
Why background process could be interrupted after some time of successful execution? (exit code 248)
我为 Raspberry Pi 编写了一个 C 程序,它从两个读卡器读取韦根卡 ID 并放入一个文本文件中。程序基于pigpio library,实际上只是修改示例:
#include <stdio.h>
#include <pigpio.h>
#include "wiegand.h"
void callback1(int bits, uint32_t value)
{
FILE *saved = stdout;
stdout = fopen("log_readers.txt", "a");
printf("Reader_1: bits=%d value=%u\n", bits, value);
fclose(stdout);
stdout = saved;
}
void callback2(int bits, uint32_t value)
{
FILE *saved = stdout;
stdout = fopen("log_readers.txt", "a");
printf("Reader_2: bits=%d value=%u\n", bits, value);
fclose(stdout);
stdout = saved;
}
int main(int argc, char *argv[])
{
Pi_Wieg_t * w1;
Pi_Wieg_t * w2;
if (gpioInitialise() < 0) return 1;
w1 = Pi_Wieg(14, 15, callback1, 5);
w2 = Pi_Wieg(23, 24, callback2, 5);
sleep(300);
Pi_Wieg_cancel(w1);
Pi_Wieg_cancel(w2);
gpioTerminate();
}
当我编译 运行 程序时一切正常
(用 tail -f
检查 log_readers.txt 文件)
当我 运行 二进制文件处于后台模式时
sudo ./all_readers.bin &
它也能正确执行,但过了一段时间就停止工作了。
紧接着运行宁ps看进程:
pi@raspberrypi ~/sandbox $ ps ax | grep all_readers
3768 pts/0 S 0:00 sudo ./all_readers.bin
3769 pts/0 SLl 0:00 ./all_readers.bin
但是如果我 运行 同样的命令在 5 分钟后 ps 没有输出:
pi@raspberrypi ~/sandbox $ ps ax | grep all_readers
3782 pts/0 S+ 0:00 grep --color=auto all_readers
[2]- Exit 248 sudo ./all_readers.bin
看起来进程已终止。根据我的观察,它不依赖于与程序相关的事件,如阅读卡片。此外,它在 RAM 和磁盘上有足够的可用内存。我试图通过 pidstat 实用程序发现问题,但没有看到任何错误字符串。
退出代码 248 是什么意思?终止后台进程的原因是什么以及如何诊断?
非常感谢任何建议。
没有注意到明显的事情。需要删除 sleep(300)
并像这样进行无限循环 while (1) { sleep(1); }
我为 Raspberry Pi 编写了一个 C 程序,它从两个读卡器读取韦根卡 ID 并放入一个文本文件中。程序基于pigpio library,实际上只是修改示例:
#include <stdio.h>
#include <pigpio.h>
#include "wiegand.h"
void callback1(int bits, uint32_t value)
{
FILE *saved = stdout;
stdout = fopen("log_readers.txt", "a");
printf("Reader_1: bits=%d value=%u\n", bits, value);
fclose(stdout);
stdout = saved;
}
void callback2(int bits, uint32_t value)
{
FILE *saved = stdout;
stdout = fopen("log_readers.txt", "a");
printf("Reader_2: bits=%d value=%u\n", bits, value);
fclose(stdout);
stdout = saved;
}
int main(int argc, char *argv[])
{
Pi_Wieg_t * w1;
Pi_Wieg_t * w2;
if (gpioInitialise() < 0) return 1;
w1 = Pi_Wieg(14, 15, callback1, 5);
w2 = Pi_Wieg(23, 24, callback2, 5);
sleep(300);
Pi_Wieg_cancel(w1);
Pi_Wieg_cancel(w2);
gpioTerminate();
}
当我编译 运行 程序时一切正常
(用 tail -f
检查 log_readers.txt 文件)
当我 运行 二进制文件处于后台模式时
sudo ./all_readers.bin &
它也能正确执行,但过了一段时间就停止工作了。
紧接着运行宁ps看进程:
pi@raspberrypi ~/sandbox $ ps ax | grep all_readers
3768 pts/0 S 0:00 sudo ./all_readers.bin
3769 pts/0 SLl 0:00 ./all_readers.bin
但是如果我 运行 同样的命令在 5 分钟后 ps 没有输出:
pi@raspberrypi ~/sandbox $ ps ax | grep all_readers
3782 pts/0 S+ 0:00 grep --color=auto all_readers
[2]- Exit 248 sudo ./all_readers.bin
看起来进程已终止。根据我的观察,它不依赖于与程序相关的事件,如阅读卡片。此外,它在 RAM 和磁盘上有足够的可用内存。我试图通过 pidstat 实用程序发现问题,但没有看到任何错误字符串。
退出代码 248 是什么意思?终止后台进程的原因是什么以及如何诊断?
非常感谢任何建议。
没有注意到明显的事情。需要删除 sleep(300)
并像这样进行无限循环 while (1) { sleep(1); }