Langsung ke konten

Topic archive

Linux

Ekosistem sistem operasi open-source yang dikenal karena fleksibilitas, developer tooling, serta penggunaannya yang luas pada server, platform cloud, perangkat embedded, dan workstation.

66 articles
Linux 26 Sep 2026 4 min read

Resize Gambar Massal dengan Bash dan ImageMagick Tanpa Menimpa File Asli

Perintah untuk resize gambar cukup singkat. Yang perlu diperhatikan saat memproses banyak file adalah bagaimana hasilnya disimpan. Jika hasil langsung menimpa gambar asli, kegagalan di tengah proses bisa menyisakan koleksi yang baru diproses sebagian. Menaruh semua hasil dalam satu folder juga berisiko menimbulkan benturan nama: events/photo.jpg dan products/photo.jpg akan memiliki nama file tujuan yang sama. Direktori hasil yang terpisah menghindari kedua masalah tersebut. Script berikut menerima direktori sumber, direktori tujuan, dan batas panjang sisi gambar. File JPEG, PNG, serta WebP diproses secara rekursif dengan struktur folder dan format tetap dipertahankan, sementara file asli tidak diubah.

Linux 26 Sep 2026 5 min read

Konversi Massal JPEG dan PNG ke WebP dengan Bash dan cwebp

Dua file bernama photo.jpg dan photo.png di direktori yang sama akan menghasilkan nama tujuan yang identik: photo.webp. Jika benturan baru diketahui saat konversi berlangsung, salah satu gambar bisa terlewat atau hasil sebelumnya tertimpa. Daftar input sebaiknya diperiksa sebelum encoding dimulai. Script Bash berikut memakai cwebp dan menyimpan hasil dalam struktur direktori terpisah. Mode auto secara default memakai WebP lossy untuk JPEG dan WebP lossless untuk PNG. File sumber tetap utuh, sedangkan file tujuan yang sudah ada akan dilewati.

Linux 23 Sep 2026 4 min read

TFD_TIMER_CANCEL_ON_SET Mengubah Lompatan Clock Realtime Menjadi ECANCELED

Timer absolut yang terikat ke CLOCK_REALTIME memiliki ketergantungan yang tidak dimiliki deadline monotonic: administrator, layanan sinkronisasi, atau proses berprivilege dapat memindahkan wall clock secara diskontinu ketika timer masih aktif. Linux timerfd dapat mengekspos kejadian itu secara eksplisit. Dengan TFD_TIMER_ABSTIME | TFD_TIMER_CANCEL_ON_SET, perubahan clock yang memenuhi syarat membuat read() saat ini atau berikutnya pada descriptor timer gagal dengan ECANCELED. Perilaku ini memisahkan dua kejadian yang mudah tercampur: tercapainya waktu wall clock yang dijadwalkan dan tidak berlakunya basis clock yang dipakai saat jadwal dibuat.

Linux 23 Sep 2026 4 min read

signalfd Mengonsumsi Sinyal yang Diblokir Melalui Read File Descriptor

signalfd Mengonsumsi Sinyal yang Diblokir Melalui Read File Descriptor signalfd() mengubah notifikasi sinyal terpilih menjadi record yang dapat dikonsumsi dengan read(). Sinyal pending yang cocok membuat descriptor menjadi readable, sehingga pemrosesan sinyal dapat berada pada jalur poll(), select(), atau epoll yang sama dengan socket, timer, dan descriptor lain. Descriptor tidak otomatis mengalihkan sinyal hanya karena mask miliknya memuat nomor sinyal tersebut. Aturan signal mask normal tetap berlaku. Pada susunan yang umum, sinyal terpilih diblokir agar tidak dikirim melalui disposition biasa, lalu sebuah signalfd membaca instance yang pending.

Linux 23 Sep 2026 4 min read

PR_SET_PDEATHSIG Mengikat Notifikasi Child ke Terminasi Thread Parent

PR_SET_PDEATHSIG Mengikat Notifikasi Child ke Terminasi Thread Parent PR_SET_PDEATHSIG memungkinkan sebuah process Linux meminta signal ketika thread yang membuatnya berhenti. Mekanismenya memiliki cakupan sempit: ini adalah notifikasi dari kernel yang terikat pada relasi parent, bukan kontrak umum tentang lifetime process dan bukan jaminan bahwa dua process akan berhenti bersamaan. Batas tersebut penting pada supervisor, launcher, dan helper process. Child dapat bereaksi saat pembuatnya hilang tanpa melakukan polling PID, tetapi identitas parent, waktu pemasangan setting, aturan inheritance, dan transisi credential menentukan batas perilakunya.

Linux 23 Sep 2026 4 min read

pidfd_getfd Menduplikasi Descriptor Target ke Proses Pemanggil

pidfd_getfd Menduplikasi Descriptor Target ke Proses Pemanggil pidfd_getfd() dapat menempatkan duplikat file descriptor milik proses lain ke tabel descriptor proses pemanggil. Descriptor hasil menjadi milik pemanggil, tetapi tetap merujuk ke open file description yang sama dengan descriptor terpilih pada proses target. Batas ini penting karena operasi tersebut tidak membuka ulang pathname, membangun ulang socket, atau membuat posisi file independen. Kernel menduplikasi referensi yang sudah ada melintasi batas proses. pidfd dan targetfd menunjuk dua hal berbeda Pemanggilan menerima PID file descriptor serta nomor descriptor milik proses target:

Linux 23 Sep 2026 5 min read

Mode Semaphore eventfd Mengubah Nilai Counter Menjadi Read Satu Unit

Linux eventfd mengekspos counter 64-bit yang dikelola kernel melalui file descriptor. Interface yang ringkas ini memiliki pilihan semantik penting: read normal menguras nilai counter saat itu, sedangkan read dengan EFD_SEMAPHORE hanya mengambil satu unit. Jalur write tetap menambahkan nilai ke counter yang sama. Perbedaan tersebut mengubah objek dari counter notifikasi agregat menjadi sumber unit yang dapat dikonsumsi satu per satu melalui descriptor. Model readiness tetap dapat dipakai bersama poll, epoll, dan mekanisme multiplexing descriptor lain, sehingga satu objek dapat menghubungkan accounting producer dengan event loop tanpa payload pipe terpisah.

Linux 23 Sep 2026 5 min read

membarrier Private Expedited Mengurutkan Memori Userspace Antar-Thread

Linux membarrier() dapat memindahkan sebagian biaya sinkronisasi dari jalur yang sangat sering dieksekusi ke jalur koordinasi yang lebih jarang. Dengan MEMBARRIER_CMD_PRIVATE_EXPEDITED, satu thread meminta kernel membentuk titik memory ordering bagi thread yang sedang berjalan dalam proses yang sama. Biaya system call dibayar saat koordinasi diperlukan, bukan dengan menempatkan hardware memory barrier pada setiap eksekusi fast path. Mekanisme ini lebih sempit daripada rendezvous thread umum. membarrier() tidak menjalankan callback aplikasi pada sibling thread, tidak menunggu acknowledgement pada level aplikasi, dan tidak membuat data race biasa menjadi sinkronisasi yang valid. Kontraknya berfokus pada pengurutan akses memori userspace di sekitar barrier.

Linux 23 Sep 2026 3 min read

MADV_WIPEONFORK Mengganti Memori Private yang Diwariskan dengan Nol

MADV_WIPEONFORK Mengganti Memori Private yang Diwariskan dengan Nol fork() normal memberikan child mapping yang berasal dari address space parent, dengan page private yang writable umumnya ditangani melalui copy-on-write. MADV_WIPEONFORK mengubah aturan pewarisan itu untuk range anonymous private tertentu: mapping tetap ada pada child, tetapi isinya menjadi zero-filled. Parent tetap menyimpan byte yang sudah ada. Operasi ini mengubah memori yang terlihat oleh child pada batas pembuatan proses, bukan menghapus range milik parent.

Linux 23 Sep 2026 4 min read

MADV_DONTFORK Mengecualikan Range Memori dari Address Space Child

MADV_DONTFORK mengubah satu bagian spesifik dari pembuatan proses di Linux: mapping yang ditandai dengan advice ini tidak dibuat tersedia pada child hasil fork(). Parent tetap memiliki mapping tersebut. Child dimulai tanpa range address itu, sehingga address yang valid pada parent tidak otomatis valid pada child. Ini adalah kontrol semantik terhadap pewarisan mapping, bukan sekadar petunjuk cache. Operasi ini termasuk extension madvise() khusus Linux yang dapat mengubah perilaku memori yang terlihat oleh program.

Linux 23 Sep 2026 5 min read

Lock OFD fcntl Mengikuti Open File Description, Bukan Proses

Record lock POSIX tradisional memiliki sifat yang dapat menimbulkan efek tak terduga pada kode dengan beberapa descriptor untuk file yang sama: kepemilikan lock terkait dengan proses, dan penutupan descriptor untuk file tersebut dapat melepas lock milik proses. Open file description lock di Linux memindahkan batas kepemilikan itu ke open file description kernel yang dirujuk descriptor. Antarmukanya tetap memakai fcntl() dan struct flock, tetapi identitas pemiliknya berubah. F_OFD_SETLK, F_OFD_SETLKW, dan F_OFD_GETLK membuat byte-range lock mengikuti open file description, bukan identitas proses.

Linux 23 Sep 2026 4 min read

EPOLLEXCLUSIVE Membatasi Wakeup Antar-instance epoll

EPOLLEXCLUSIVE Membatasi Wakeup Antar-instance epoll EPOLLEXCLUSIVE mengubah distribusi event ketika beberapa instance epoll mendaftarkan file description target yang sama. Tanpa flag ini, sebuah event readiness dapat membangunkan waiter yang terkait dengan setiap instance epoll yang berminat. Dengan registrasi eksklusif, Linux dapat membatasi fan-out tersebut dan mengurangi wakeup yang redundan. Flag ini tidak membuat delivery menjadi single-consumer, tidak menetapkan kepemilikan target, dan tidak menggantikan koordinasi pada level aplikasi. Kontraknya lebih sempit: di antara instance epoll yang mendaftarkan target dengan EPOLLEXCLUSIVE, satu atau lebih instance menerima event untuk sebuah wakeup, bukan mewajibkan semuanya menerima event tersebut.

Linux 23 Sep 2026 5 min read

close_range dengan UNSHARE Memisahkan Cleanup File Descriptor dari Thread Lain

Proses Linux multithread dapat memakai satu tabel file descriptor secara bersama. Pola itu praktis selama eksekusi normal: descriptor yang dibuka satu thread tersedia bagi thread lain. Masalah muncul ketika satu thread sedang menyiapkan konteks eksekusi terbatas dan ingin membuang range descriptor yang luas, sementara thread lain masih dapat mengalokasikan descriptor pada tabel yang sama. close_range() menyediakan operasi berbasis range untuk batas tersebut. Dengan CLOSE_RANGE_UNSHARE, kernel lebih dulu memisahkan caller dari tabel descriptor bersama, lalu menerapkan penutupan yang diminta pada tabel hasil pemisahan milik caller. Secara konsep, operasi ini mendekati gabungan unshare(CLONE_FILES) dan penutupan range, tetapi kernel dapat menghindari pekerjaan yang tidak diperlukan pada kasus umum.

Linux 22 Sep 2026 4 min read

TFD_TIMER_CANCEL_ON_SET Melaporkan Perubahan Diskontinu Clock Realtime

timerfd yang dipasang terhadap wall clock dapat mengalami perubahan clock diskontinu sebelum deadline tercapai. Dengan TFD_TIMER_CANCEL_ON_SET, Linux mengekspos kejadian itu melalui descriptor: read() berikutnya gagal dengan ECANCELED, bukan menyajikan lompatan clock sebagai expiration timer biasa. Cakupan flag ini sengaja sempit. Efeknya berlaku ketika timerfd_settime() memasang timer absolut pada CLOCK_REALTIME atau CLOCK_REALTIME_ALARM, lalu clock tersebut mengalami perubahan diskontinu. Cancellation terikat pada timer realtime absolut timerfd_create() memilih clock yang menjadi basis timer. Descriptor dengan CLOCK_REALTIME mengikuti system wall clock, sedangkan CLOCK_MONOTONIC mengikuti clock yang tidak disetel melalui perubahan wall clock.

Linux 22 Sep 2026 4 min read

SO_PEEK_OFF Memberi UNIX Socket Cursor Peek yang Stateful

SO_PEEK_OFF Memberi UNIX Socket Cursor Peek yang Stateful recv(..., MSG_PEEK) biasanya memeriksa data di depan receive queue socket tanpa menghapusnya. Pada UNIX-domain socket Linux, SO_PEEK_OFF dapat mengganti pola yang selalu melihat kepala queue itu dengan cursor yang bergerak maju setelah setiap peek. Cursor tersebut merupakan state milik socket. Peek menggesernya ke depan, sedangkan konsumsi byte dari depan queue menggesernya kembali sebesar jumlah byte yang diambil. Interaksi ini memungkinkan proses memeriksa bagian queue secara berurutan tanpa mengonsumsinya, sambil mempertahankan posisi peek terhadap data yang masih tersisa.

Linux 22 Sep 2026 5 min read

signalfd Mengubah Signal yang Diblokir Menjadi Event yang Dapat Dibaca

Signal Linux biasanya memotong alur thread melalui delivery asinkron. signalfd() menyediakan boundary berbeda untuk signal terpilih: signal tetap diblokir pada thread yang relevan, lalu instance yang pending dikonsumsi dengan membaca file descriptor. Mekanisme signal tidak berubah menjadi byte stream. Kernel tetap memelihara state signal serta aturan delivery process-directed dan thread-directed. signalfd menambahkan interface file descriptor untuk menerima signal dari set yang dikonfigurasi. Blocking dan mask descriptor adalah state yang terpisah Sebuah signalfd memiliki signal-set mask yang menentukan signal mana yang dapat diterimanya. Mask tersebut tidak memblokir signal pada thread. Pemakaian normal karena itu memasangkan pembuatan descriptor dengan operasi signal mask.

Linux 22 Sep 2026 4 min read

EFD_SEMAPHORE Membuat Read eventfd Mengonsumsi Satu Unit Counter

eventfd normal mengubah seluruh counter yang bernilai nonzero menjadi satu hasil read lalu mereset counter ke nol. Saat dibuat dengan EFD_SEMAPHORE, hanya sisi read yang berubah: setiap read yang berhasil mengembalikan nilai 64-bit 1 dan mengurangi counter yang dikelola kernel sebanyak satu. Perbedaan ini membuat beberapa unit yang dikumpulkan writer tetap dapat dikonsumsi secara terpisah. Objeknya tetap sebuah eventfd, dengan counter, aturan write, lifetime descriptor, dan integrasi readiness yang sama.

Linux 21 Sep 2026 5 min read

io_uring Multishot Accept Mempertahankan Satu Request Accept Tetap Aktif

Request accept biasa memiliki pola satu banding satu: satu operasi yang dikirim pada akhirnya menghasilkan satu completion. io_uring multishot accept mengubah hubungan tersebut. Satu SQE accept dapat tetap aktif untuk banyak koneksi masuk dan menghasilkan completion queue entry terpisah bagi setiap socket yang diterima. Request itu persisten, tetapi tidak permanen. Setiap CQE membawa state yang memungkinkan aplikasi menentukan apakah request awal masih dapat menghasilkan completion berikutnya. Boundary ini penting karena server yang menganggap setiap CQE sukses sebagai bukti bahwa accept masih aktif dapat berhenti menerima koneksi secara diam-diam setelah request multishot berakhir.

Linux 21 Sep 2026 4 min read

futex_waitv Menunggu Beberapa Futex Word dalam Satu Wait

Futex wait tradisional menunjuk satu futex word. Model itu cocok untuk mutex atau condition yang blocking state-nya direpresentasikan oleh satu nilai shared 32-bit. Beberapa desain sinkronisasi memiliki kebutuhan berbeda: satu thread perlu sleep sampai salah satu dari beberapa state independen berubah. futex_waitv() menyediakan vector wait tersebut. Caller mengirim array wait descriptor yang masing-masing memuat alamat futex dan expected value. Kernel memeriksa vector dan hanya melakukan block selama semua entry masih cocok dengan state yang diharapkan.

Linux 21 Sep 2026 5 min read

Flag Resolve openat2 Membatasi Traversal Path Saat Lookup

Path yang diberikan ke openat() diresolusikan oleh kernel, tetapi caller hanya memiliki kontrol terbatas atas traversal komponen perantara. Linux openat2() menambahkan field resolve untuk menerapkan batas pada keseluruhan operasi lookup. Batas tersebut diperiksa ketika komponen path sedang ditelusuri, bukan melalui validasi path di userspace yang dilanjutkan dengan open terpisah. Perbedaan ini relevan saat komponen path dapat berubah secara concurrent. Urutan yang memeriksa path lalu membukanya menghasilkan dua observasi terpisah terhadap state filesystem yang mutable. openat2() menempatkan policy lookup pada system call yang sama dengan operasi yang menghasilkan file descriptor.

Linux 21 Sep 2026 5 min read

File Seal memfd Membekukan State Shared Memory

File dari memfd_create() pada awalnya merupakan file anonim yang mutable. Ukurannya dapat diubah, isinya dapat ditulis, dan file dapat dipetakan seperti file biasa, sementara storage-nya bersifat volatile dan dilepas setelah referensi terakhir hilang. File sealing menambahkan fase lain pada lifecycle tersebut: setelah data selesai diisi, kernel dapat menolak secara permanen kelas perubahan tertentu. Transisi ini berguna saat satu process menyiapkan byte lalu menyerahkan file description yang sama ke process lain. Penerima dapat memeriksa seal yang melekat pada inode, bukan hanya mengandalkan kesepakatan bahwa pengirim tidak akan mengubah objek lagi.

Linux 20 Sep 2026 5 min read

pidfd_getfd Menduplikasi File Descriptor Aktif Antarproses

Sebuah proses dapat memperoleh duplikat file descriptor yang sudah terbuka di proses lain tanpa meminta proses tersebut mengirimkannya melalui UNIX domain socket. Linux pidfd_getfd() melakukan transfer itu melalui PID file descriptor, dengan izin yang dibatasi oleh pemeriksaan akses ptrace. Descriptor yang diterima merupakan entry baru di caller, tetapi objek kernel di baliknya bukan objek independen. Descriptor tersebut merujuk ke open file description yang sama dengan descriptor target. Perbedaan ini menentukan sharing offset, file status flags, dan operasi terhadap objek dasarnya.

Linux 19 Sep 2026 5 min read

Write Protection userfaultfd Mengubah Write Memori Menjadi Event Userspace

Sebuah thread dapat mengakses page yang valid dan resident, tetapi tetap berhenti sebelum mengubah isinya. Dengan mode write-protect Linux userfaultfd, page yang terdaftar dapat ditandai sehingga write menghasilkan event page fault pada userfaultfd. Handler di userspace menerima event tersebut, menjalankan bookkeeping, melepas proteksi, lalu membiarkan thread yang tertahan melanjutkan eksekusi. Mekanisme ini berada di antara permission page biasa dan accounting memori tingkat aplikasi. Page tetap menjadi bagian dari address space proses; kernel mengarahkan write fault ke protokol berbasis file descriptor, sehingga aplikasi tidak perlu membangun jalur kontrol serupa di atas mprotect() dan SIGSEGV.

Linux 19 Sep 2026 5 min read

userfaultfd Memindahkan Resolusi Page Fault Terpilih ke User Space

Akses memori biasanya masuk ke jalur page fault kernel dan selesai tanpa aplikasi memilih isi page tepat pada saat itu. Linux userfaultfd mengubah batas tersebut untuk rentang alamat virtual yang didaftarkan: fault terpilih menjadi event pada file descriptor, lalu manager di user space dapat menyediakan atau mengaktifkan page sebelum thread yang mengalami fault melanjutkan eksekusi. Mekanisme ini tidak mengganti page table proses dengan struktur data di user space. Kernel tetap memiliki page-table state dan melakukan operasi mapping akhir. User space memperoleh kendali atas kelas fault tertentu beserta waktu resolusinya.