我的C代码有问题,基本上我需要通过mutt程序发送电子邮件。必须在GPIO引脚发出中断时发送。我的sendMail功能如下所示。我通过使用 system 函数实现了这一点。 Main包含带logAlarm功能的循环,其中包含sendMail 。问题是当 system(cmd)功能完成时,整个C程序停止。例如,当我把sendMail函数放在main的开头它工作并且发送电子邮件到我的邮箱而不停止整个程序,在循环中它设法发送它但它终止程序。我试着用&签署在后台运行它,但它没有帮助。
P.S我不知道它是否重要,但我也使用setitimer的系统调用,间隔2秒检查一些事情,但我想这对这种情况没有影响。
有什么想法吗?
提前致谢:)
sendMail功能:
this
这是我的主要功能:
var urls = [
"https://www.youtube.com",
"https://www.google.com",
"https://fiddle.jshell.net",
];
urls.forEach(function(v) {
if (window.location.href.indexOf(v) >= 0) {
alert("test");
}
});
答案 0 :(得分:0)
好问题。根据描述,我认为sendMail函数正常工作。我没有和mutt合作过。但是我使用过system()。
系统的作用是什么,它会分叉当前进程的子进程并使用execve()执行命令。所以问题应该在于系统的返回。
因此,首先应检查系统功能的返回状态。如果你能够在系统()下面创建printf(),那么你就没有系统问题()。如果你无法在系统()下面得到printf,那么system()会杀死你的进程。 (通过发送sigkill或similer信号,但不发送sigint或sigquit,因为system()会忽略它)。您正在cmd本身中创建子进程(echo输出管道到mutt)。可能这应该是根本原因。
如果您在此处发现问题,那么问题至关重要,您可以在" NOTES"因为你已经实现了那里提到的相同逻辑,所以" man system"的部分。首先,试着等待那里提到的条件。如果您仍然无法执行此操作,请尝试从该子进程分叉两个新的子进程,运行execl或任何其他exec系列函数(" man 3 exec")以运行echo和mutt。
如果system()没问题,请检查logAlarm()。它是否给sendMail提供了正确的参数?如果你得到"错误写入日志文件!!!",那么整个序列都可以。