Skip to content

Instantly share code, notes, and snippets.

@udzura
Created November 13, 2017 10:58
Show Gist options
  • Save udzura/1f8bb7fd53cecf5fe45a782861f656d6 to your computer and use it in GitHub Desktop.
Save udzura/1f8bb7fd53cecf5fe45a782861f656d6 to your computer and use it in GitHub Desktop.

(1) 長く存在するようなプロセスを作ってみよう

$ ruby -e 'loop { sleep 1 }' &
[1] 19638

(2) そのプロセスのPIDを特定しよう

  • 上記の [1] 19638 がPIDだよね
  • 別解:
$ ps auxf | grep -e PI[D] -e rub[y]
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu   19638  0.0  0.8  42016  8752 pts/1    Sl   10:48   0:00              \_ ruby -e loop { sleep 1 }

(3) そのプロセスについて、以下の情報を取得してみよう

(3.1) カレントディレクトリ (hint: /proc/PID/cwd)

$ sudo ls -l /proc/19638/cwd
lrwxrwxrwx 1 ubuntu ubuntu 0 Nov 13 10:50 /proc/19638/cwd -> /home/ubuntu

(3.2) 環境変数 (hint: /proc/PID/environ)

# environは \0 で区切られているので...
$ sudo ruby -e 'puts File.read("/proc/19638/environ").split("\0")'
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=10.0.2.2 56253 10.0.2.15 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=en_US.UTF-8
XDG_SESSION_ID=30
USER=ubuntu
PWD=/home/ubuntu
...

(3.3) メモリマッピング (hint: /proc/PID/maps)

$ sudo cat /proc/19638/maps                                                                                                                                   
565427354000-565427355000 r-xp 00000000 08:01 16581                      /usr/bin/ruby2.3                                                                                          
565427554000-565427555000 r--p 00000000 08:01 16581                      /usr/bin/ruby2.3                   
565427555000-565427556000 rw-p 00001000 08:01 16581                      /usr/bin/ruby2.3                   
565428e82000-56542927c000 rw-p 00000000 00:00 0                          [heap]                             
7fb27cea0000-7fb27cea7000 r-xp 00000000 08:01 777526                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/stringio.so                                                          
7fb27cea7000-7fb27d0a6000 ---p 00007000 08:01 777526                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/stringio.so                                                          
7fb27d0a6000-7fb27d0a7000 r--p 00006000 08:01 777526                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/stringio.so
7fb27d0a7000-7fb27d0a8000 rw-p 00007000 08:01 777526                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/stringio.so
7fb27d0a8000-7fb27d0aa000 r-xp 00000000 08:01 777484                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/trans/transdb.so
7fb27d0aa000-7fb27d2aa000 ---p 00002000 08:01 777484                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/trans/transdb.so
7fb27d2aa000-7fb27d2ab000 r--p 00002000 08:01 777484                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/trans/transdb.so
7fb27d2ab000-7fb27d2ac000 rw-p 00003000 08:01 777484                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/trans/transdb.so
7fb27d2ac000-7fb27d2ae000 r-xp 00000000 08:01 777441                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/encdb.so
7fb27d2ae000-7fb27d4ad000 ---p 00002000 08:01 777441                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/encdb.so
7fb27d4ad000-7fb27d4ae000 r--p 00001000 08:01 777441                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/encdb.so
7fb27d4ae000-7fb27d4af000 rw-p 00002000 08:01 777441                     /usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/encdb.so
7fb27d4af000-7fb27d5b0000 rw-p 00000000 00:00 0
7fb27d5b0000-7fb27d6b8000 r-xp 00000000 08:01 2299                       /lib/x86_64-linux-gnu/libm-2.24.so
7fb27d6b8000-7fb27d8b7000 ---p 00108000 08:01 2299                       /lib/x86_64-linux-gnu/libm-2.24.so
7fb27d8b7000-7fb27d8b8000 r--p 00107000 08:01 2299                       /lib/x86_64-linux-gnu/libm-2.24.so
7fb27d8b8000-7fb27d8b9000 rw-p 00108000 08:01 2299                       /lib/x86_64-linux-gnu/libm-2.24.so
7fb27d8b9000-7fb27d8c2000 r-xp 00000000 08:01 2297                       /lib/x86_64-linux-gnu/libcrypt-2.24.so
7fb27d8c2000-7fb27dac1000 ---p 00009000 08:01 2297                       /lib/x86_64-linux-gnu/libcrypt-2.24.so
7fb27dac1000-7fb27dac2000 r--p 00008000 08:01 2297                       /lib/x86_64-linux-gnu/libcrypt-2.24.so
7fb27dac2000-7fb27dac3000 rw-p 00009000 08:01 2297                       /lib/x86_64-linux-gnu/libcrypt-2.24.so
7fb27dac3000-7fb27daf1000 rw-p 00000000 00:00 0
7fb27daf1000-7fb27daf4000 r-xp 00000000 08:01 2298                       /lib/x86_64-linux-gnu/libdl-2.24.so
7fb27daf4000-7fb27dcf3000 ---p 00003000 08:01 2298                       /lib/x86_64-linux-gnu/libdl-2.24.so
7fb27dcf3000-7fb27dcf4000 r--p 00002000 08:01 2298                       /lib/x86_64-linux-gnu/libdl-2.24.so
7fb27dcf4000-7fb27dcf5000 rw-p 00003000 08:01 2298                       /lib/x86_64-linux-gnu/libdl-2.24.so
7fb27dcf5000-7fb27dd73000 r-xp 00000000 08:01 6451                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb27dd73000-7fb27df73000 ---p 0007e000 08:01 6451                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb27df73000-7fb27df74000 r--p 0007e000 08:01 6451                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb27df74000-7fb27df75000 rw-p 0007f000 08:01 6451                       /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb27df75000-7fb27df8d000 r-xp 00000000 08:01 2310                       /lib/x86_64-linux-gnu/libpthread-2.24.so
7fb27df8d000-7fb27e18d000 ---p 00018000 08:01 2310                       /lib/x86_64-linux-gnu/libpthread-2.24.so
7fb27e18d000-7fb27e18e000 r--p 00018000 08:01 2310                       /lib/x86_64-linux-gnu/libpthread-2.24.so
7fb27e18e000-7fb27e18f000 rw-p 00019000 08:01 2310                       /lib/x86_64-linux-gnu/libpthread-2.24.so
...
7fb27e55a000-7fb27e7c3000 r-xp 00000000 08:01 16569                      /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3.0                                                            
7fb27e7c3000-7fb27e9c2000 ---p 00269000 08:01 16569                      /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3.0                                                            
7fb27e9c2000-7fb27e9c8000 r--p 00268000 08:01 16569                      /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3.0                                                            
7fb27e9c8000-7fb27e9c9000 rw-p 0026e000 08:01 16569                      /usr/lib/x86_64-linux-gnu/libruby-2.3.so.2.3.0                                                            
7fb27e9c9000-7fb27e9d9000 rw-p 00000000 00:00 0                                          
7fb27e9d9000-7fb27e9ff000 r-xp 00000000 08:01 2291                       /lib/x86_64-linux-gnu/ld-2.24.so                                                                          
7fb27ea55000-7fb27ebf0000 r--p 00000000 08:01 10220                      /usr/lib/locale/locale-archive                                                                            
7fb27ebf0000-7fb27ebf4000 rw-p 00000000 00:00 0                                          
7fb27ebf7000-7fb27ebf8000 ---p 00000000 00:00 0                                          
7fb27ebf8000-7fb27ebfe000 rw-p 00000000 00:00 0                                          
7fb27ebfe000-7fb27ebff000 r--p 00025000 08:01 2291                       /lib/x86_64-linux-gnu/ld-2.24.so                                                                          
7fb27ebff000-7fb27ec00000 rw-p 00026000 08:01 2291                       /lib/x86_64-linux-gnu/ld-2.24.so                                                                          
7fb27ec00000-7fb27ec01000 rw-p 00000000 00:00 0                                          
7ffefd8b2000-7ffefe0b1000 rw-p 00000000 00:00 0                          [stack]         
7ffefe1d7000-7ffefe1d9000 r--p 00000000 00:00 0                          [vvar]          
7ffefe1d9000-7ffefe1db000 r-xp 00000000 00:00 0                          [vdso]          
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]      
  • 発展: heap領域とstack領域について

(3.4) スレッドの数 (hint: /proc/PID/task)

# rubyプログラムは必ず2スレッド
$ sudo ls -l /proc/19638/task
total 0
dr-xr-xr-x 7 ubuntu ubuntu 0 Nov 13 10:54 19638
dr-xr-xr-x 7 ubuntu ubuntu 0 Nov 13 10:54 19639
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment