从两个同步进程

时间:2016-04-29 08:31:32

标签: java unix logging operating-system multiprocessing

我在java中编写了一个应用程序并将其部署在unix服务器上。 我已在我的应用程序中实现了日志记录,日志是在文件X.log.txt

中生成的

如果我使用不同的用户或单个用户不同的会话运行我的jar的多个实例:
我的X.log.txt日志是否有可能混合在一起?
或者它将采用FCFS方式??

示例:让P1和P2成为调用java应用程序并生成日志的两个进程。

P1和P2正在同时将其各自的日志写入X.log.txt。这个陈述是真的吗?或者它完全基于CPU调度算法(FCFS,SJF等)?

即使我没有使用时间戳它对我来说也很好。 当我执行它们时,一个接一个地生成日志,意味着对于特定实例,所有日志都写入文件,然后写入下一个实例。我的问题仍然是开放的,这完全取决于我们的处理器编写处理工作的方式还是其他的东西?

2 个答案:

答案 0 :(得分:0)

如果两个进程正在写入同一个日志文件,则数据将随机损坏。您将在中间切割线条并完成其他日志中的数据。您甚至可以在文件的不同位置获得大量二进制零,这取决于操作系统(在某些操作系统中,它将无法同时从两个位置写入同一文件)。

写入单独的文件,然后使用某些第三方工具加入/浏览它们,以获取按时间戳排序的视图。

答案 1 :(得分:0)

如果您的进程都写入同一目录和文件路径,您将获得一些奇怪的行为。根据您的实现,两个应用程序将同时写入文件,或者一个应用程序将阻止另一个应用程序写入。

我的建议是在运行时生成日志文件的名称,并添加一些独特的内容,如时间戳或pid(进程ID),这样就不会再发生冲突了:

X.log.[PID].txtX.log.[TIMESTAMP].txt

注意:您必须在时间戳(秒或纳秒)中使用足够低的分辨率以避免名称冲突。