2

我正在使用一个运行 linux 的嵌入式系统。当我在前台运行已编译的 C 程序时,它可以正常工作。但是,当我在程序调用后添加“&”以使其在后台作为作业运行时,某些功能无法正常工作。停止工作的主要功能是使用“读取”功能(unistd.h),用于从套接字读取。

在后台运行进程是否会降低其权限?还有什么可能导致这种行为?

编辑:该函数使用“选择”和“读取”函数从用于接收 CANbus 消息帧的套接字读取。收到数据后,我们对其进行分析并将字符串“回显”到 .txt 文件中,以充当数据记录器。在前台运行时,文件创建并添加成功,但在后台运行时,文件未创建/附加。

4

3 回答 3

5

在前台和后台运行进程的唯一区别是与终端的交互。

通常,当您在后台处理某个进程时,它stdin会断开连接(它不再从键盘读取输入),并且您不能再向该进程发送键盘快捷键信号,例如 Ctrl-C/Ctrl-D。

除此之外没有任何改变,没有权限或优先级改变。

于 2013-09-16T14:51:39.537 回答
1

不,进程在进入后台时不会更改其权限。

于 2013-09-16T14:50:49.033 回答
0

在内部发生的事情是在进程的代码开始执行之前,文件描述符 0,1,2 (stdin,out,err) 将指向 /dev/null 而不是通常的文件。

同样,如果您使用描述符将指向该特定>/file/path文件stdout

您可以通过以下方式验证这一点

ls -l /proc/process_number/fd
于 2014-02-27T14:57:13.183 回答