MacOS 端末のコマンドopen
や Window 端末のコマンドをまねるときはstart
コメントを付けてください。この回答~/.xsession-errors
たとえば、(bash
)にstdoutとstderrを追加することをお勧めします。
alias open='&>>~/.xsession-errors xdg-open'
私が予想する問題は競争条件です。lsof ~/.xsession-errors
これは、22のプロセスが書き込み用にファイルを開いたままにしたことを示しています。
2つのプロセスが同じオフセットに書き込むのを防ぐ方法は何ですか~/.xsession-errors
?
ベストアンサー1
ファイルが追加モードで開くと、オペレーティングシステムはすべての書き込みが最後に行われることを保証します。したがって、あるライターのデータは別のライターのデータを上書きしません。
>>
これは、ファイルが追加モード(つまりシェル)で開かれている場合にのみ適用されます。ファイル作成者が次のコマンドを使用してファイルを開いた場合、この保証は適用されず、>
次の順序が可能です。
- プロセス1
>out
::現在位置0 - プロセス2
>>out
:現在位置0にあります。 - プロセス1:書き込み
hello
、現在位置6 - プロセス2:書き込み
world
、これは位置6に記録されており、プロセス2は現在位置12にあります。 - プロセス1:書き込み
oops
プロセス1のファイルの場所が変更されていないため、場所6に書き込まれます。
Debian では (2001 年頃から) ファイルが.xsession-errors
`/etc/X11/Xsession で作成され、追加モードで開かれるので、すべてがうまく動作します。
exec >>"$ERRFILE" 2>&1
何にログインするのかわかりません~/.xsession-errors
。
誰もが追加モードでファイルを開くと、すべての出力が表示されます。ただし、出力が断片化される可能性があります。実際、通常のファイルへの十分な小さな書き込みはアトミックです。 512Bより小さいものはどこでも十分に小さくなければならず、Linuxはそれ以上を保証すると思います。したがって、複数の同時ライターがある場合でも、ライターがラインバッファリングされた出力を使用し、ラインが長すぎないと仮定すると、各ログラインは完全に見えるはずです。
1POSIXはパイプ以外のものを保証しません。