Linux用户空间exe的IPC传递

Linux用户空间exe的IPC传递,ipc,embedded-linux,Ipc,Embedded Linux,我们有一个程序,叫它Y.exe。它在嵌入式系统上运行,并且在不退出的情况下运行(即,系统启动、加载Linux内核、所有内核模块,然后是Y.exe,Y永远不会返回(用户空间)) 现在,我们需要更改Y.exe的运行方式,即打开一些调试,使其采用某些其他代码路由进行测试,等等 当前的方法是编译并重新编译Y以处理每个测试。这似乎是一个时间的腰部,我们应该能够动态设置条件 我希望在内核中使用类似proc/debug系统的东西,您可以简单地执行以下操作: echo 1 > /proc/test_y

我们有一个程序,叫它Y.exe。它在嵌入式系统上运行,并且在不退出的情况下运行(即,系统启动、加载Linux内核、所有内核模块,然后是Y.exe,Y永远不会返回(用户空间))

现在,我们需要更改Y.exe的运行方式,即打开一些调试,使其采用某些其他代码路由进行测试,等等

当前的方法是编译并重新编译Y以处理每个测试。这似乎是一个时间的腰部,我们应该能够动态设置条件

我希望在内核中使用类似proc/debug系统的东西,您可以简单地执行以下操作:

echo 1 > /proc/test_y
启用测试等

由于proc/debug是内核级项目,因此它们不能用于用户空间可执行文件(?)

除了通过消息Q或TCP实现完整的IPC外,还有其他方法实现类似的功能吗


谢谢。

让它在每个事件循环迭代的某处检查是否存在标志文件

SIGUSR1
设置信号处理程序<代码>SIGUSR2

一旦出现这些情况,在程序中设置一个标志值,该标志值将执行测试或输出调试信息,然后在收到另一个标志值或标志文件消失后进行切换,等等


类似于上面的东西应该实现与您所说的类似的功能。信号会更直接(可能更直接),但任何一种机制都应该足够。

让它在每个事件循环迭代的某个地方检查标志文件的存在吗

SIGUSR1
设置信号处理程序<代码>SIGUSR2

一旦出现这些情况,在程序中设置一个标志值,该标志值将执行测试或输出调试信息,然后在收到另一个标志值或标志文件消失后进行切换,等等


类似于上面的东西应该实现与您所说的类似的功能。信号会更直接(可能更直接),但任何一种机制都应该足够。

您能通过命令行发送这些信号吗?我们的想法是使用标志等来控制功能,使用可能/不可能的gcc选项来减少运行时影响。是的,
kill-usr1pid
可以做到这一点
kill-l
列出了可能的可用信号
SIGKILL
SIGSTOP
不能被捕获<代码>man 7信号提供了有关各种信号及其默认行为的更多信息。如果您还不熟悉,可能需要使用函数
signal
(也可能是
sigaction
)来处理它们。请注意,只有两个用户级信号(尽管有些人还挂接
SIGHUP
和其他人),因此如果您想要更多,您还可以考虑使用命名管道来传递特定的命令,以便启用什么样的调试信息(这样的情况自然会变得更加复杂)。我们需要相当多的指示来控制所有模块…所以可能信号不是一个好主意。我假设没有任何方法可以将参数传递给信号?不是那样的。为了传递更多的信息,最好是使用一个命名管道,您只需编写简单的命令即可,运行的进程在开始和每次事件循环迭代时打开并监视另一端。您也可以使用标志文件来实现这一点,但命名管道会自动为您提供纯FIFO(尽管您可能仍然希望
flock
写入端),而标志文件必须更仔细地控制竞争条件。您是否可以通过命令行发送这些信号?我们的想法是使用标志等来控制功能,使用可能/不可能的gcc选项来减少运行时影响。是的,
kill-usr1pid
可以做到这一点
kill-l
列出了可能的可用信号
SIGKILL
SIGSTOP
不能被捕获<代码>man 7信号提供了有关各种信号及其默认行为的更多信息。如果您还不熟悉,可能需要使用函数
signal
(也可能是
sigaction
)来处理它们。请注意,只有两个用户级信号(尽管有些人还挂接
SIGHUP
和其他人),因此如果您想要更多,您还可以考虑使用命名管道来传递特定的命令,以便启用什么样的调试信息(这样的情况自然会变得更加复杂)。我们需要相当多的指示来控制所有模块…所以可能信号不是一个好主意。我假设没有任何方法可以将参数传递给信号?不是那样的。为了传递更多的信息,最好是使用一个命名管道,您只需编写简单的命令即可,运行的进程在开始和每次事件循环迭代时打开并监视另一端。您也可以使用标志文件来实现这一点,但是命名管道会自动为您提供纯FIFO(尽管您可能仍然希望
flock
写入端),而标志文件必须针对竞争条件进行更仔细的控制。