問題タブ [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.

0 投票する
0 に答える
194 参照

macos - 単一の空の Mach ポート セットを監視している kqueue が読み取り可能であることをポーリングが示すのはなぜですか?

空の Mach ポート セットという 1 つのアイテムを監視している kqueue があります。kevent64利用可能なイベントがないことをselect示し、kqueue が読み取りの準備ができていないことを示します。しかしpoll、kqueue読み取り可能であると言います! kevent64- ただし、準備ができていると思われるイベントを後で読み取るために呼び出す場合は、そうではないようです。

私が使用しているコードは以下のとおりです。のようなものでビルドしてから、または何でもgcc -Wall -std=c99 -o test test.c実行できます。(待機せずに 1 を読み取ろうとした後に実際に取得されたイベントの数)、(ポーリング後に読み取りの準備ができているファイル記述子の数)、および (ポーリング後に読み取りの準備ができているファイル記述子の数)./testからの戻り値を出力します。kevent64selectpoll

私が期待する出力は次のようなもので、kqueue が空であることを示してkevent64いますselectpoll

しかし、私が実際に得たのはこれであり、それを示して、あることkevent64select言いpoll、さらに、pollkqueueが読み取り可能であることを示した後でも、読み取るイベントがないことを示しています(これが2番目の呼び出しkevent64の理由です) kevent64)。

( の 1 の値reventsPOLLIN、おそらく、ブロックせずにデータを読み取ることができることを示します。POLLRDNORMと をPOLLRDBAND個別に指定した場合、結果は同じです。)

なぜ不一致なのですか?

私のテストコード:

0 投票する
1 に答える
445 参照

c - 2 つのプロセス間でメッセージを送信できません Mach

私は Mach 上の 2 つのプロセス間でメッセージを送信しようとしています (正確には、これは Mach マイクロカーネルを使用した Debian GNU/Hurd です)。これは私が持っているコードです:

これは machheader.h です。

アプリケーションを実行すると、次のようになります。

これは、メッセージが正常にキューに入れられたことを示していますが、そこで停止し、親プロセスのキューからの読み取りに進みません。何か案が?

0 投票する
1 に答える
813 参照

ios - iOS カーネル開発

iOS Mach (カーネル) に開発するプロセス (ある場合) は、ドライバーを開発し、Microsoft がドライバーに署名するときに、Windows に似たものがありますか?

アプリストアで配布できますか?

0 投票する
2 に答える
3228 参照

c - マッハポートを子プロセスに渡す

forkMac OSX で作成された子プロセスにマッハ ポートを渡そうとしています。この SO の質問Shared Mach ports with child processesを見ましたが、問題を説明するだけの解決策はありません。このサイトhttps://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.htmlを見ると、マッハ ポートを子プロセスに渡す方法が含まれていますが、残念ながらサンプル コードではありません。

ポートスワップを実装しようとしましたが、子プロセスは親プロセスから送信されたメッセージを受信できmach_msgませrecv_portinvalid name。以下は私がこれまでに持っているものです。非常に多くのコードで申し訳ありませんが、mach IPC のようなものは簡潔にするのが難しくなります。

では、ブートストラップ ポート ハックが機能しなくなったので、Mac OSX の子プロセスにマッハ ポートを渡すにはどうすればよいでしょうか。

編集

Ken Thomases が彼の回答で行ったポイントを反映するようにコード例を変更しました。子プロセスは送信権を持つポートを作成し、それを親に送信します。ただし、親プロセスは、子によって作成および送信されたポートを受信できず、ハングアップしrecv_portます。

0 投票する
1 に答える
1007 参照

darwin - Mach ポート リークをデバッグするにはどうすればよいですか?

C++ で記述されたサーバーがあり、osx で実行すると Mach ポートがリークします。具体的には、実行top中に約 50000 (under) であることに気付きました#PORTS。不思議なことに、一晩実行したままにしておくと、翌日にはマシンが基本的に停止していたため (ctrl-c に応答するのに 15 分かかり、新しい ssh 接続を受け入れていませんでした)、IT 部門はマシンを再起動する必要がありました。このようなリークにより、システムがこのようにダウンする可能性はありますか? ルートとして実行されていませんでした。

とにかく、この種のリークの原因を検索するための良い戦略は何ですか? 何か良いツールはありますか?

実行時に確実に 5 つのポートがリークする 1 つのテストを見つけましたが、それだけです。

編集:私たちのスレッド クラスがマッハ ポート リークを作成していることがわかりましたが、その理由がわかりません。コンストラクターには、次のコードがあります。

そして、プロセスのポート数が への呼び出し後に 1 つ増えることに気付きましたpthread_create。これは予想どおりです。

次に、後で次のコードでスレッドに参加します。

pthread_joinまた、例外はスローされないため、0 が返されて成功したとしか想定できませんが、top のポート数は減少しません。スレッドをクリーンアップするために他に必要なことはありますか?

0 投票する
1 に答える
76 参照

python - OS X でプロセスを実行し、イニシエーター プロセスを見つける

起動プロセスに従って、開いているすべてのアプリケーションの統計を計算するデーモン (スクリプトまたは下位レベルの言語に基づく) を作成したいと思います。問題は、開始プロセスが実際の親プロセスと常に同等であるとは限らないことです。

たとえば、次のような実行可能ファイルを開くはずの Microsoft Word からハイパーリンクを押すと、 file:///Applications/Chess.app/

上記の場合、'Chess' の ppid が実際には 'launchd' であることがわかりました。これは、ランチパッドから実行した場合とまったく同じです。

おそらく、誰が実際にアプリケーションを開始したかを把握するための mach_port (またはその他の) API がありますか?