問題タブ [mach]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - 単一の空の Mach ポート セットを監視している kqueue が読み取り可能であることをポーリングが示すのはなぜですか?
空の Mach ポート セットという 1 つのアイテムを監視している kqueue があります。kevent64
利用可能なイベントがないことをselect
示し、kqueue が読み取りの準備ができていないことを示します。しかしpoll
、kqueueは読み取り可能であると言います! kevent64
- ただし、準備ができていると思われるイベントを後で読み取るために呼び出す場合は、そうではないようです。
私が使用しているコードは以下のとおりです。のようなものでビルドしてから、または何でもgcc -Wall -std=c99 -o test test.c
実行できます。(待機せずに 1 を読み取ろうとした後に実際に取得されたイベントの数)、(ポーリング後に読み取りの準備ができているファイル記述子の数)、および (ポーリング後に読み取りの準備ができているファイル記述子の数)./test
からの戻り値を出力します。kevent64
select
poll
私が期待する出力は次のようなもので、kqueue が空であることを示してkevent64
いますselect
。poll
しかし、私が実際に得たのはこれであり、それを示して、あることkevent64
をselect
言いpoll
、さらに、poll
kqueueが読み取り可能であることを示した後でも、読み取るイベントがないことを示しています(これが2番目の呼び出しkevent64
の理由です) kevent64
)。
( の 1 の値revents
はPOLLIN
、おそらく、ブロックせずにデータを読み取ることができることを示します。POLLRDNORM
と をPOLLRDBAND
個別に指定した場合、結果は同じです。)
なぜ不一致なのですか?
私のテストコード:
c - 2 つのプロセス間でメッセージを送信できません Mach
私は Mach 上の 2 つのプロセス間でメッセージを送信しようとしています (正確には、これは Mach マイクロカーネルを使用した Debian GNU/Hurd です)。これは私が持っているコードです:
これは machheader.h です。
アプリケーションを実行すると、次のようになります。
これは、メッセージが正常にキューに入れられたことを示していますが、そこで停止し、親プロセスのキューからの読み取りに進みません。何か案が?
ios - iOS カーネル開発
iOS Mach (カーネル) に開発するプロセス (ある場合) は、ドライバーを開発し、Microsoft がドライバーに署名するときに、Windows に似たものがありますか?
アプリストアで配布できますか?
c - マッハポートを子プロセスに渡す
fork
Mac OSX で作成された子プロセスにマッハ ポートを渡そうとしています。この SO の質問Shared Mach ports with child processesを見ましたが、問題を説明するだけの解決策はありません。このサイトhttps://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.htmlを見ると、マッハ ポートを子プロセスに渡す方法が含まれていますが、残念ながらサンプル コードではありません。
ポートスワップを実装しようとしましたが、子プロセスは親プロセスから送信されたメッセージを受信できmach_msg
ませrecv_port
んinvalid name
。以下は私がこれまでに持っているものです。非常に多くのコードで申し訳ありませんが、mach IPC のようなものは簡潔にするのが難しくなります。
では、ブートストラップ ポート ハックが機能しなくなったので、Mac OSX の子プロセスにマッハ ポートを渡すにはどうすればよいでしょうか。
編集
Ken Thomases が彼の回答で行ったポイントを反映するようにコード例を変更しました。子プロセスは送信権を持つポートを作成し、それを親に送信します。ただし、親プロセスは、子によって作成および送信されたポートを受信できず、ハングアップしrecv_port
ます。
darwin - Mach ポート リークをデバッグするにはどうすればよいですか?
C++ で記述されたサーバーがあり、osx で実行すると Mach ポートがリークします。具体的には、実行top
中に約 50000 (under) であることに気付きました#PORTS
。不思議なことに、一晩実行したままにしておくと、翌日にはマシンが基本的に停止していたため (ctrl-c に応答するのに 15 分かかり、新しい ssh 接続を受け入れていませんでした)、IT 部門はマシンを再起動する必要がありました。このようなリークにより、システムがこのようにダウンする可能性はありますか? ルートとして実行されていませんでした。
とにかく、この種のリークの原因を検索するための良い戦略は何ですか? 何か良いツールはありますか?
実行時に確実に 5 つのポートがリークする 1 つのテストを見つけましたが、それだけです。
編集:私たちのスレッド クラスがマッハ ポート リークを作成していることがわかりましたが、その理由がわかりません。コンストラクターには、次のコードがあります。
そして、プロセスのポート数が への呼び出し後に 1 つ増えることに気付きましたpthread_create
。これは予想どおりです。
次に、後で次のコードでスレッドに参加します。
pthread_join
また、例外はスローされないため、0 が返されて成功したとしか想定できませんが、top のポート数は減少しません。スレッドをクリーンアップするために他に必要なことはありますか?
python - OS X でプロセスを実行し、イニシエーター プロセスを見つける
起動プロセスに従って、開いているすべてのアプリケーションの統計を計算するデーモン (スクリプトまたは下位レベルの言語に基づく) を作成したいと思います。問題は、開始プロセスが実際の親プロセスと常に同等であるとは限らないことです。
たとえば、次のような実行可能ファイルを開くはずの Microsoft Word からハイパーリンクを押すと、 file:///Applications/Chess.app/
上記の場合、'Chess' の ppid が実際には 'launchd' であることがわかりました。これは、ランチパッドから実行した場合とまったく同じです。
おそらく、誰が実際にアプリケーションを開始したかを把握するための mach_port (またはその他の) API がありますか?