알고리즘과 언어
-
C++ 프로세스 메모리 측정 방법 (링크)알고리즘과 언어/c++ 2022. 10. 7. 17:31
리눅스에서 1개의 프로세스 메모리를 측정해야하는 일이 있었다. 주로 top 명령어 등을 통해 서버 내 전체 메모리 사용량을 구하는 방법은 많았지만 1개의 프로세스에 해당하는 메모리 사용량을 구하는 방법은 찾기 어려웠다. 스크립트를 만드는 방법도 있었지만, 1초만에 끝나는 프로세스이기에 스크립트로 프로세스를 돌린 후, pid를 찾고, 0.1초씩 기록하는 것이 정확한 방법일지 고민이 있었다. 많은 메모리 프로파일러 툴이 있었지만 GUI 지원가능한 리눅스가 아니면 가장 peak를 치는 지점과 평소 지점을 비교하기 찾기 힘들어보였다. 그러던 중 다음 C++ 내에 소스를 주입해서 하나의 프로세스를 측정하는 방법을 발견했다. /proc/self/status 는, 어떠한 임의의 pid를 가진 프로세스가 자신의(sel..
-
스크립트 중복 실행 방지알고리즘과 언어/shell(bash) 2022. 6. 20. 20:24
a.sh 에서 b.sh의 스크립트 중복 실행을 방지하기 위해서는 ps -ef | grep b.sh | grep -v | wc -l 값이 1 이상인지를 통해서 b.sh 가 실행되고 있는지를 확인하면 되겠지만 a.sh에서 a.sh 스스로가 중복실행되는지를 체크하기 위해서는 위와 같은 방법으로 확인하기 어렵다. 1. a.sh 스크립트에서 동명의 a.sh가 실행되는지를 확인하기 위해서 ps -ef를 한다면, 본인도 세어지기 때문에 0인지 아닌지로 체크할 수 없음. 2. 실제로 선행되는 a.sh가 없는 경우에 ps -ef를 통해 기준을 잡으려고 했지만, 1이 나올 것이라는 기대와 달리 3이 나왔음. (2였으면 ps -ef가 실행되는 커맨드의 자식 프로세스까지 세어졌다고 생각할 수 있겠지만, 3이 나오는 경우도 존..
-
-
linux 디렉토리 생성 중복/중첩 관련 (mkdir -p)알고리즘과 언어/shell(bash) 2022. 6. 6. 19:54
리눅스에서는 같은 디렉토리를 2번 생성하면 에러를 낸다. 쉘 스크립트 내에서 mkdir을 하면 이 부분이 염려되는데, 이미 있는 디렉토리라면 무시하고 싶을 때 -p 옵션을 넣어주면 된다. `mkdir -p 경로 ` 이렇게 넣어주고 같은 디렉토리를 만든 다음에 ls -l 명령어를 통해 디렉토리의 수정 시간을 보면 맨 처음 만들어진 시간임을 알 수 있다. (이미 있는 경우, 다시 만들지 않는다.) 또한 -p옵션은 다른 용도로도 사용되는데, 중간에 포함된 디렉토리를 만들어주는데도 사용된다. 예를 들어 홈 디렉토리에 HIHI 라는 디렉토리가 없는 상황에서, mkdir /HIHI/here 을 하게 되면 오류를 발생한다. 하지만 mkdir -p /HIHI/here을 하게 되면, 홈 디렉토리 아래에 HIHI도 만들어..
-
shell script 내에 nohup 사용알고리즘과 언어/shell(bash) 2022. 6. 3. 17:14
nohup 은 백그라운드에서 프로세스가 도는 것을 보장. `실행할파일1 &`: 파일 백그라운드에서 돌아감. 그러나 터미널에서 로그아웃 시 프로세스 End `nohup 실행할파일1 &` : 파일 백그라운드에서 돌아감. 터미널 로그아웃 하더라도 프로세스 돌아감. -> 중간에 로그아웃되거나 쉘이 종료되더라도 프로그램이 무사히 돌아가는 것을 보장한다. nohup.out 이라는 곳에 자동으로 로그를 남기게 되는데, 리다이렉션(>)을 통해 정상/에러 로그를 다른 곳에 보관할 수 있다. 불필요한 로그를 쌓기 싫다면 (nohup.out이 계속 갱신된다면 파일이 커질 것이기 때문에), `nohup 실행할_파일 > /dev/null 2>&1 &` 명령어를 통해 모두 쓰레기통(/dev/null)로 버린다.