Thursday, 26 March 2015

Kiểm tra một process đang chạy hay không (dựa vào PID)?

NOTICE: bài viết tập trung vào vấn đề "kiểm tra xem một process có đang chạy hay không dựa vào PID đã biết"

Tất nhiên cách thô thiển nhất là gõ ps auxww | grep PID để tìm, nhưng bài viết này không viết về cái thô thiển ấy.

Trên Linux, có sử dụng một thứ gọi là proc filesystem. Với mỗi process đang chạy có pid là PID, sẽ tồn tại tương ứng một thư mục /proc/PID

Vậy trên các OS sử dụng Linux, có thể kiểm tra thư mục này có tồn tại không là sẽ biết process có đang chạy hay không.
# ps -ef | grep bin[d]
bind     32511     1  0 05:33 ?        00:00:00 /usr/sbin/named -u bind
# python -c 'import os; print os.path.isdir("/proc/32511")'
True
# process với PID 32519 không tồn tại
# python -c 'import os; print os.path.isdir("/proc/32519")' && ps -ef | grep [3]2519
False
Có vẻ đã bớt thô thiển hơn nhiều, nhưng cách này chỉ áp dụng được với các hệ điều hành dùng Linux (và một số hệ điều hành hỗ trợ procfs thanks +Le Manh Cuong) . Vậy còn cách nào hơn? có thể chạy trên OS X, BSD ...?

Kill it!

Monday, 23 March 2015

man + man = men

Với người mới sử dụng UNIX-like OS, man là một thứ khá dài dòng, khó đọc, khó hiểu.
Bài viết này sẽ mang ``man`` đến gần bạn hơn: man + man = (vodka) men

$ whatis man
man (1)              - an interface to the on-line reference manuals
man(1) là chương trình để đọc các file manual (manpage)

1. sections
Các manpage được phân thành 8 sections khác nhau, sections thường gặp nhất là
1 2 3 5 và 8 (fibonacci?!!!)
Khi thấy viết login(1) login(3), chúng ám chỉ chương trình login và function login.
Người dùng bình thường sẽ chỉ gõ ``man caulenh`` và nó thường trả về man 1,
để chỉ rõ section muốn dùng, thêm số section cần mở, vd ``man 3 login`` (nếu máy bạn chưa cài gói  ``manpages-dev`` câu lệnh man trên sẽ báo lỗi).
# apt-get install -y manpages-dev
...
Setting up manpages-dev (3.35-0.1ubuntu1) ...
Để liệt kê tất cả các manpage chứa 1 từ khoá, sử dụng man -k

Thursday, 12 March 2015

inodes, statvfs, và các thông số cơ bản về một filesystem

inode là viết tắt của index node, một cấu trúc dữ liệu để biểu diễn một filesystem object trên UNIX-like filesystem. Một inode có thể biểu diễn một file, directory, hoặc object khác (symlink, special block ...). Để dễ hiểu, có thể sử dụng file node thay cho inode.

sử dụng df -i để xem thông tin về inode của các filesystem trên hệ thống bạn đang dùng.
ls -i giúp hiển thị index number của 1 filesystem object.
hvn@ubuntu:~⟫ ls -i /etc/passwd
263212 /etc/passwd
hvn@ubuntu:~⟫ df -i
Filesystem                  Inodes IUsed  IFree IUse% Mounted on
/dev/mapper/ubuntu--vg-root 441504 71768 369736   17% /
none                        127233     2 127231    1% /sys/fs/cgroup
udev                        124422   456 123966    1% /dev
statvfs là một system call tuân theo chuẩn POSIX để lấy thông tin về một file system.
C function statvfs(PATH) sẽ trả về thông tin về file system chứa file được gán trong PATH.

Trên python2.7 có thể lấy thông tin này bằng os.statvfs(PATH)

Tuesday, 3 March 2015

[Python] Tí ăn gì nhỉ?

Câu hỏi vui hàng ngày được đưa ra trước 12h trưa,

A: tí ăn gì nhỉ
B: ăn tí gì nhỉ ....
C: ...
A: 4! = 24 :))

Hay là  mình cứ bất chấp hết in hết nó ra: