2016-05-30 4 views
2

私はインタビューの質問を最近聞いたことがありますが、私はインタビューの途中で答えることはできませんでした。ユーザAとユーザBがubuntu 12.04サーバでタスクを非rootユーザー。ユーザーAは52.2%のメモリ使用量でmongodbを実行しています。 Pythonには、ユーザーBが実行してユーザーAのプログラムが終了したり、自身を殺すようなプログラムがありますか?メモリ集中型Pythonプログラム

私の試み:ユーザーBとして非常に大きなファイルをメモリに読み込もうとしましたが、そうすることでユーザーBのプログラム自体が終了したり、オペレーティングシステムによって強制終了されたりします。別のユーザーのメモリを消費するプログラムをroot以外のユーザーとして強制終了させることはありますか?

あなたのプロセス(ユーザB)がユーザAよりもメモリを大量に使用していると、インタビュアが私にヒントを与えました。ユーザAのプロセスは自動的にいつか殺されます。しかし、どのように私はそのようなメモリ集中型プログラムを設計することができるのか理解できません。

+0

重複の種類http://superuser.com/questions/137207/how-to-kill-a-process-started-with-a-different-user-without-being-root- –

+0

@PeterNimroot投稿する前にこの質問と回答を読んでください...それは私のニーズに合っていません:) –

+0

まあ、ええ、でもあなたはできることはあまりありません。 mongodbがlocalhostでホストされていることを知っていれば、DoSかそれと同様のことを試みることができますが、rootやsudoerでなければ他のユーザのプロセスにPOSIXシグナルを送ることはできません。そして、localhostでのDoSingサービスは意味をなさないので、このインタビューの質問はナイスセンスです。 –

答えて

2

現代のオペレーティングシステムのほとんどは、メモリ保護を採用しています。あるプロセスが他のプロセスのメモリにアクセスすることはできません。これにより、メモリーが重いアプリケーションが他のプロセスによって割り当てられたメモリーを使用することを防止します。物理メモリがなくなると、メモリ重いアプリケーションのデータがスワップファイルに書き込まれます。スワップファイルもいっぱいになると、オペレーティングシステムはそのプロセスを強制終了します。

UserBがUserAのプロセスを強制終了させるためには、残りのメモリとスワップを使い切る必要があります。 UserAのプロセスがより多くのメモリを必要とするとすぐに、OSはUserBのプロセスを保護するためにそれを強制終了します。

このプロセスを設計するのはUserBにとって簡単です。大きなファイルを生成して開くだけです。 Pythonインタプリタのように、ファイルを開くために使用されるプログラムは、内容をメモリにロードします。

kill_list = [] 
try: 
    while True: 
     kill_list.append(1) 
except MemoryError: 
    pass 

そのようにしてください。それは、OSがそれを殺さずにできるだけ多くのメモリを占有します。今すぐお待ちください...

+0

はい、いいえ。 "OOM Killerは殺すための"最良の "プロセスを選択する必要があります。ここでの"ベスト "とは、殺害時に最大のメモリを解放するプロセスを指し、システムにとっても重要ではありません。"プロセスの –

+0

ええ、UserAのプロセスはメモリの52%を使い切っています – saq7

+0

残念ながら、mongodbプロセスの優先順位は何もわからないので、そのようなアプローチがOPでは機能しなかったのかもしれません(彼のプロセスはOOMによって殺されました) –

関連する問題