# 포크 없이 Bash로 작성된 ps aux

> Clean Markdown view of GeekNews topic #16079. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16079](https://news.hada.io/topic?id=16079)
- GeekNews Markdown: [https://news.hada.io/topic/16079.md](https://news.hada.io/topic/16079.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-30T09:44:04+09:00
- Updated: 2024-07-30T09:44:04+09:00
- Original source: [github.com/izabera](https://github.com/izabera/ps)
- Points: 1
- Comments: 1

## Topic Body

### `ps aux`를 bash로 구현하기

- **인터뷰 질문**: bash/linux 관련 지식이 필요한 포지션의 인터뷰 질문으로 다음과 같은 상황을 가정할 수 있음
  - SSH로 접속한 머신에서 bash 쉘을 사용 중인데, 새로운 프로세스를 생성할 수 없는 상황
  - 모든 PID가 사용 중인 경우 어떻게 할 것인지 묻는 질문

- **해결책**: 이 도구를 사용하면 `ps aux` 명령어를 사용할 수 있는 것처럼 행동할 수 있음
  - 모든 상황에서 100% 작동하는 것은 아니지만, 유사하게 동작함

### GN⁺의 정리

- 이 기사는 bash 쉘에서 새로운 프로세스를 생성할 수 없는 상황에서 `ps aux` 명령어를 대체할 수 있는 방법을 제시함
- bash 스크립트를 통해 시스템 프로세스를 확인할 수 있는 방법을 설명함
- 이 방법은 모든 상황에서 완벽하게 작동하지 않을 수 있지만, 제한된 환경에서 유용할 수 있음
- 비슷한 기능을 제공하는 다른 도구로는 `htop`이나 `top` 명령어가 있음

## Comments



### Comment 27673

- Author: neo
- Created: 2024-07-30T09:44:04+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41097241) 
- 컴퓨터 과학에서 가장 어려운 문제는 정렬 작업임
  - 간단해 보이는 함수도 실제로는 매우 오래 걸림
  - 여러 프로그래밍 언어에서 열 정렬 함수를 작성하는 것은 항상 어려움
  - Python의 f-strings와 패딩 기능을 사용해도 복잡하고 읽기 어려운 코드가 됨
  - 예제 코드 작성 중에도 여러 버그를 수정해야 했음

- bash/Linux 관련 지식을 요구하는 인터뷰 질문 예시
  - 모든 PID가 사용 중인 상황에서 새로운 프로세스를 생성할 수 없을 때 해결 방법을 묻는 질문
  - `/proc/[pid]/` 파일 시스템에서 PID 공간을 소모하는 프로세스를 확인함
  - `kill`은 bash의 내장 명령어로 새로운 프로세스를 생성하지 않고도 사용할 수 있음
  - 부모 프로세스를 찾아서 중지시키면 문제를 해결할 수 있음
  - 파이프나 서브셸을 생성하지 않는 깔끔한 스크립트 작성 가능함

- 2011년에 미국의 대형 기술 회사에서 SRE 역할 인터뷰 경험
  - MS Office의 온라인 브라우저 기반 대안을 만드는 회사였음
  - 전화 인터뷰 후 bash로 `netstat` 대체 프로그램 작성 과제 부여받음
  - 당시에는 `/proc/`에서 소켓 정보를 찾는 방법을 몰라서 `ps`와 `fuser` 대체 프로그램을 작성함
  - 인터뷰어가 이를 수용했고, 이후 현장 인터뷰로 진행됨
  - 이 시나리오가 현실에 기반한 것인지 궁금함

- bash@libera의 Izabera는 bash 전문가 중 한 명임
  - 지난 10년 동안 많은 것을 배움

- 깔끔한 bash 코드 예시
  - 대부분의 bash 코드는 비효율적이지만, 이 코드는 좋은 예시임

- 모든 PID가 사용 중인 상황에서 새로운 프로세스를 생성할 수 없을 때 해결 방법을 묻는 질문
  - POSIX 쉘에서는 bash 스크립트가 호환되지 않음

- bash 3.2에서는 작동하지 않지만 bash 4.2에서는 작동함
  - 예제 코드에서 `printf`의 형식 문자 오류 발생

- procps가 설치되지 않은 시스템에서 프로세스를 나열하는 더 나은 사용 사례 제안

- bash로 리스너와 클라이언트를 작성할 수도 있지만, 실제로는 추천하지 않음
