1 ポイント 投稿者 GN⁺ 2024-07-30 | 1件のコメント | WhatsAppで共有

Bash で ps aux を実装する

  • 面接の質問: bash/linux 関連の知識が必要なポジションの面接質問として、次のような状況を想定できる

    • SSH で接続したマシンで bash シェルを使っているが、新しいプロセスを生成できない状況
    • すべての PID が使い切られている場合、どうするかを問う質問
  • 解決策: このツールを使えば、ps aux コマンドを使えるかのように振る舞える

    • あらゆる状況で 100% 動作するわけではないが、似たように動作する

GN⁺のまとめ

  • この記事は、bash シェルで新しいプロセスを生成できない状況で ps aux コマンドを代替できる方法を提示している
  • bash スクリプトを通じてシステムプロセスを確認する方法を説明している
  • この方法はあらゆる状況で完全に動作するとは限らないが、制限のある環境では有用な場合がある
  • 似た機能を提供する別のツールとしては、htoptop コマンドがある

1件のコメント

 
GN⁺ 2024-07-30
Hacker Newsのコメント
  • コンピュータサイエンスで最も難しい問題は整列処理である

    • 一見単純そうな関数でも、実際には非常に時間がかかる
    • 複数のプログラミング言語で列整列関数を書くのは常に難しい
    • Pythonのf-stringsとパディング機能を使っても、複雑で読みにくいコードになる
    • サンプルコードを書いている最中にも複数のバグを修正しなければならなかった
  • bash/Linuxに関する知識を問う面接質問の例

    • すべてのPIDが使用中で、新しいプロセスを作成できない状況での対処法を尋ねる質問
    • /proc/[pid]/ファイルシステムでPID空間を消費しているプロセスを確認する
    • killはbashの組み込みコマンドなので、新しいプロセスを生成せずに使える
    • 親プロセスを見つけて停止させれば問題を解決できる
    • パイプやサブシェルを生成しないクリーンなスクリプトを書くこともできる
  • 2011年にアメリカの大手テック企業でSRE職の面接を受けた経験

    • MS Officeのオンラインブラウザベース代替製品を作っていた会社だった
    • 電話面接後、bashでnetstat代替プログラムを書く課題を与えられた
    • 当時は/proc/でソケット情報を見つける方法を知らなかったため、psfuser代替プログラムを書いた
    • 面接官はそれを受け入れ、その後オンサイト面接に進んだ
    • このシナリオが現実に基づいたものなのか気になる
  • bash@liberaのIzaberaはbashの専門家の一人である

    • この10年間で多くのことを学んだ
  • クリーンなbashコードの例

    • ほとんどのbashコードは非効率だが、これは良い例である
  • すべてのPIDが使用中で、新しいプロセスを作成できない状況での対処法を尋ねる質問

    • POSIXシェルではbashスクリプトは互換性がない
  • bash 3.2では動作しないが、bash 4.2では動作する

    • サンプルコードでprintfの書式指定子エラーが発生する
  • procpsがインストールされていないシステムで、プロセスを列挙するより良いユースケースの提案

  • bashでリスナーやクライアントを書くこともできるが、実際には推奨されない