syscalls

あるプロセスには非ブロック記述子があり、他のプロセスには同じファイル/ソケットを参照するブロック記述子がありますか?
syscalls

あるプロセスには非ブロック記述子があり、他のプロセスには同じファイル/ソケットを参照するブロック記述子がありますか?

私は通常のファイルよりもソケットに興味がありますが、基本的に1つのプロセスがソケットをブロックとして「見る」ことができ、他のプロセスがそれを非ブロックとして見ることができるかどうかを知りたいです。私の考えではそうです。カーネルは、システムコールに使用されたオプションに基づいてこれらすべてを処理します。 私はこれがTCPソケットよりUnixドメインソケットに近いと思います。これは、2つの異なるプロセスが同じTCPソケットを使用できるとは思わないからです(しかし間違っているかもしれません)。 ...

Admin

同じプロセスグループIDで複数のプロセスを実行するには?
syscalls

同じプロセスグループIDで複数のプロセスを実行するには?

私はkillpgシステムコールを使用する方法を学んでいます。したがって、実験のために同じpgidで2つの新しいプロセスを開始し、killpgを使用してそのプロセスを終了しようとしています。 私はsetidについて読んだので、次のことを試しました。 setsid gedit & firefox & しかし、geditとfirefoxという2つのプロセスは2つの異なるpgidで終わります。 ...

Admin

必要な量のメモリを読み取るには、 process_vm_readv を使用します。
syscalls

必要な量のメモリを読み取るには、 process_vm_readv を使用します。

process_vm_readv の場合、Linux のマニュアルページには次のように指定されています。 [...](防止)単一のリモートiovec要素のスパニングメモリページ(通常4KiB)。 (代わりに、リモート読み取りを2つのremote_iov要素に分割し、それを単一の書き込みlocal_iov項目にマージします。最初の読み取り項目はページ境界まで上がり、2番目の読み取り項目は次のページ境界から始まります。) これがなぜ問題なのかは理解していますが、問題を解決する方法はよくわかりません。ページ境界がどこにあるかを調べる必要がありますか?そ...

Admin

mmapはx32 ABIでどのように機能しますか?
syscalls

mmapはx32 ABIでどのように機能しますか?

Linux 5.0-rc5ソースコードを見ている間、arch/x86/entry/syscalls/syscall_64.tblx32のための別のシステムコール番号がないことがわかりましたmmap。 それでは、カーネルがユーザースペースでx32 ABIを使用しているため、4GiB以上のマッピングされたアドレスを提供していないことをどのように知ることができますか? あるいは、通常、アドレスを返すことができるシステムコールは、私たちがx32を使用していて4GiB以上を返さないことをどうやって知ることができますか? ...

Admin

x86_64でLinuxシステムコールに32ビット引数を渡すにはどうすればよいですか?
syscalls

x86_64でLinuxシステムコールに32ビット引数を渡すにはどうすればよいですか?

システムコールに、uid_tまたはint(ファイル記述子用)unsigned intなどの一部の32ビットパラメータまたは一部の16ビットタイプが必要な場合は、64ビットレジスタを使用してそれをどのように渡すことができますか? この命令を使用する前に、64ビットでゼロ拡張または符号拡張が必要ですかsyscall? 元の64ビットポインタ型パラメータが32ビットになるようにRAXを使用している場合は、__X32_SYSCALL_BIT同じ64ビットレジスタを使用してパラメータを渡す必要があります。この場合、アドレスパラメータをゼロ拡張する必要がありますか?...

Admin

seccompを使用して文字列値を比較するには?
syscalls

seccompを使用して文字列値を比較するには?

一部のLinuxシステムコール(たとえばexecve、、openat)には文字列型パラメータがあります。ところで、seccompが提供する比較関数は、SCMP_CMP2つのポインタを比較するようです。それでは、プロセスが特定のディレクトリで開くことができるファイルを制限するためにseccompをどのように使用しますか?ユーザーに一般的な比較機能を提供する方法はありますか? ...

Admin

プログラムを実行し、システムコールを傍受してリダイレクトします。
syscalls

プログラムを実行し、システムコールを傍受してリダイレクトします。

プログラムを実行したいのですが、プログラムが特定のファイルを読み取ろうとしたときに選択した他のファイルを読み取るようにしたいと思います。 特に、プログラムは構成ファイルを読み取ろうとしますが、設計が誤っているため、ユーザーは構成ファイルの場所を指定できません。また、プログラムが読み取ろうとしている場所でファイルを編集する権限もありません。 私はそれが可能であることを知っています発覚プログラムは作成されたシステムコールを使用しstrace、open()からプログラムを実行すると、プログラムが作成したシステムコールのみを表示できますstrace。どのような方...

Admin

sigkillがプロセスに到達するのを防ぐ方法はありますか?
syscalls

sigkillがプロセスに到達するのを防ぐ方法はありますか?

私はそのプロセスがSIGKILLをブロックできないことを知っています。 しかし、SIGKILLが(特定の)プロセスに到達するのを一時的に防ぐ外部方法はありますか? (例:ファイアウォールを介したパケットの削除) ...

Admin

Linuxの各システムコールには最大1つの関数が必要ですか?
syscalls

Linuxの各システムコールには最大1つの関数が必要ですか?

Linuxでは、関数とシステムコールの関係を理解し​​ようとしています。 私が知る限り、プロセスの機能は、プロセスがシステムコールを呼び出すときにのみ考慮されます。特定のパラメータを使用して特定のシステムコールが呼び出されると、プロセスに特定の機能がある場合にのみシステムコールが成功します。 特定のパラメータを持つ特定のシステムコールの場合、成功するには1つの関数しか必要ありませんか?または、特定の(または任意の)パラメータセットを使用して呼び出すときに、特定のシステムコールに複数の機能が必要ですか? ...

Admin

コマンドの前にbash stat()とaccess()が多すぎます。普通ですか?
syscalls

コマンドの前にbash stat()とaccess()が多すぎます。普通ですか?

実行するように指示されたシェルで実行すると、strace実際のバイナリが実行される前に広範な統計を示す次の出力が得られます。bashmkdirmkdir BASH$> strace -f sh -c "bash -c \"mkdir /tmp\" 2>&1 | nl | grep -e "execve\|stat\|access" [.....] 2766 [pid 17371] stat(".", {st_mode=S_IFDIR|0750, st_size=17262, ...}) = 0 2767 [pid 1737...

Admin

カーネルがSSE / AVXレジスタと命令を使用できないのはなぜですか?
syscalls

カーネルがSSE / AVXレジスタと命令を使用できないのはなぜですか?

このStackOverflowの記事には次のものがあります。、 一部の環境では、特定の命令または特定のレジスタの使用に制限があります。例えば、Linuxカーネルでは、SSE / AVXまたはFPレジスタは通常許可されていません。したがって、ほとんどの最適化されたmemcpyバリアントはSSEまたはAVXレジスタに依存し、x86で通常のmovベースの64ビットコピーを使用するため使用できません。これらのプラットフォームでは、memcpyの最適化によるパフォーマンスの大部分の利点は、SIMDコードの制限を破らずにrep movsbを使用することで達成でき...

Admin

単純なbashコマンドに明白な複製や分岐がないのはなぜですか?
syscalls

単純なbashコマンドに明白な複製や分岐がないのはなぜですか?

以下(sh存在する/bin/dash)を検討してください。 $ strace -e trace=process sh -c 'grep "^Pid:" /proc/self/status /proc/$$/status' execve("/bin/sh", ["sh", "-c", "grep \"^Pid:\" /proc/self/status /"...], [/* 47 vars */]) = 0 arch_prctl(ARCH_SET_FS, 0x7fcc8b661540) = 0 clone(child_stack=NULL, flags=CL...

Admin

シリアルポートのwrite()がデータ転送を完了したタイミングを理解する
syscalls

シリアルポートのwrite()がデータ転送を完了したタイミングを理解する

ユーザー空間からシリアルポートへの書き込みとIOピンの値を同期させる必要があります。 (まだカーネル空間ではそうできないからです。その他の問題)。私のコード(エラーチェックを省略)は次のとおりです。 char buf[3] = {'U','U','U'}; int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY); // supposed to be blocking // fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK); <-- makes no ...

Admin

ストレス
syscalls

ストレス

この質問にはすでに答えがあります。: ...

Admin