deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Corral, süre dolduğunda bir yapay zeka ajanının veya CI işinin başlattığı her süreci sonlandırıyor

Açık kaynaklı bir Linux runner, cgroups veya bir subreaper artı pidfds kullanarak hiçbir alt sürecin zaman aşımına uğrayan bir komuttan daha uzun yaşamasını garanti altına alıyor; süreç ağacının boş olduğunu kanıtlayamazsa 120 çıkış koduyla sonlanıyor.

Corral, süre dolduğunda bir yapay zeka ajanının veya CI işinin başlattığı her süreci sonlandırıyor

Hacker News'te Cardinal44/corral deposu üzerinden ortaya çıkan yeni açık kaynaklı runner olan Corral, gösterişsiz ama kalıcı bir otomasyon sorununu ele alıyor: zaman aşımına uğrarken arkalarında başıboş süreçler bırakan komutlar. Araç, bir komutu belirli bir süre sınırı içinde çalıştırıyor ve geri döndüğünde komutun başlattığı her sürecin ölmüş olacağını vaat ediyor. Bu iddiayı kendisi doğruluyor ve süreç ağacının boş olduğunu kanıtlayamazsa 120 durum koduyla çıkıyor.

Hedeflediği hata modları

Projenin README'sine göre yapay zeka kodlama ajanları ve CI hatları rutin olarak kendilerinin yazmadığı shell komutları çalıştırıyor. Çoğu runner alt sürece veya sürecin process group'una sinyal gönderir, sonra çıktı pipe'larının kapanmasını bekler. Bu model üç yaygın durumda bozulur. İki kez fork yapan ve setsid() çağıran bir daemon, farklı bir process group ve oturuma, ebeveyni init olacak şekilde geçer; dolayısıyla sinyal ona hiç ulaşmaz. stdout veya stderr'yi açık tutan bir arka plan süreci, runner'a end-of-file görünmesini engeller ve komut çıktıktan sonra takılı kalır. Ve SIGTERM'i yok sayan bir süreç basitçe çalışmaya devam eder. Artıklar portları, dosya kilitlerini ve CPU'yu işgal eder ve bir sonraki çalıştırmayı başarısız kılabilir.

İki temizleme stratejisi

Corral, tüm süreç ağacını yalnızca doğrudan alt süreci değil, iki şekilde yönetir. Enforced modda komut kendi cgroup v2 grubunun içinde çalışır; çekirdek tüm torun süreçleri o grupta tutar ve cgroup.kill dosyasına tek bir yazım hepsini aynı anda sonlandırır. Bu mod ayrıca bellek ve süreç sayısı sınırlarını uygular ve systemd-run ile bir betik tarafından sağlanan yetkilendirilmiş bir cgroup gerektirir. Fallback mod cgroup gerektirmez: corral bir child subreaper görevi görür, böylece yetim süreçler ona yeniden ebeveynlenir; sonra hiçbir şey kalmayana kadar /proc'u ebeveyn, process group ve oturuma göre tarar ve yol açanları pidfd'ler üzerinden sinyalleyerek yeniden kullanılmış bir PID'nin yanlışlıkla sinyallenmesini engeller. Her iki modda da çalıştırma, pipe'lar kapanınca değil komut çıkınca biter; her çalıştırmadan sonra corral hiç süreç kalmayana kadar süreçleri durdurur ve reap eder; enforced modda çekirdek de grubu boş bildirmeli ve grup dizini kaldırılabilir olmalıdır. Varsayılan ayar, kullanılabilir olduğunda enforced modu seçer.

Yapılandırma ve çıkış kodları

Seçenekler arasında gerçek zaman süre sınırı, SIGTERM ile SIGKILL arasındaki bekleme süresi (varsayılan 2 saniye), bir doğrulama zaman aşımı, stdout ve stderr için birleşik üst sınır, stdin politikası ve bir JSON bayrağıyla yazılan makine tarafından okunabilir denetim kayıtları yer alır. Bu kayıtlar modu, sınırları, çalıştırmanın neden sona erdiğini, adım adım zamanlamaları ve durmayan süreçlerin PID'lerini içerir. Çıkış kodları mümkün olduğu yerde gelenekseldir — zaman aşımı için 124, bellek sınırı için 121, çıktı sınırı için 122, sinyellenen komutlar için sinyal numarası artı 128 — ve 120 kodu, diğer tüm kodların önüne geçen, kanıtlanamayan temizlik için ayrılmıştır. Enforced mod Linux 5.14 veya sonrasını gerektirir (aksi halde en az 5.11), önceden derlenmiş binary'ler glibc 2.36 ile x86-64'ü hedefler ve proje MIT lisanslıdır. Dokümantasyon, bunun bir güvenlik sandbox'ı olmadığını açıkça belirtir: dosya erişimi, ağ erişimi ve ayrıcalıklar kısıtlanmaz.

Kıyaslamalar ne gösteriyor

README, on hata enjeksiyon programını — daemon'lar, SIGTERM yok sayıcılar, yoğun fork yapanlar, pipe tutucular — her iki modda corral'a, timeout tarzı bir runner'a ve yalnızca doğrudan alt sürecini öldüren basit bir Python runner'a karşı, her birine 2 saniyelik sınırla çalıştıran bir kıyaslama düzeneği içeriyor. Corral her iki modda her testte sıfır sağulkan bıraktı. Timeout runner, 200-çocuk testinde beş çalıştırmadan birinde bir süreci canlı bıraktı (yazarın notu: bu, GNU'nunki değil uutils coreutils 0.8.0'dı), Python runner ise birkaç testte tamamen takıldı ve 192'ye kadar süreci çalışır durumda bıraktı. Enforced mod ayrıca 64 MiB sınırında 256 MiB ayıran bir testi 0.12 saniyede durdurdu. Ek yük mütevazı: /bin/true çalıştırmak enforced modda medyan yaklaşık 11.3 ms, fallback modda 6.6 ms sürdü; corral olmadan ise 0.83 ms; bir kill, süre sınırından sonra yaklaşık 9–12 ms içinde doğrulandı.

Belirtilen sınırlamalar

Dokümantasyon eksikler hakkında açık sözlü. Komutun kendi süreç ağacının dışında başlattığı işler — systemd-run, D-Bus veya at üzerinden — corral tarafından görülemez. Enforced modda, cgroupfs'ye kendisi yazan bir süreç gruptan ayrılabilir. Fallback modda setuid bir alt süreç sinyallenemez, bu da 120 çıkış kodunu tetikler. Corral'ın kendisi SIGKILL ile öldürülürse yalnızca doğrudan alt sürecinin duracağı garanti edilir. PTY desteği yoktur, CPU-zamanı sınırı yoktur ve yalnızca Linux'ta çalışır.

Neden önemli

Artık daemon'lar, klasik olarak titrek CI'nin ve giderek artan şekilde hiçbir insanın izlemediği shell komutları ateşleyen kötü davranan yapay zeka ajanlarının bir kaynağı. Corral, temizliği iyi niyetli bir umuttan doğrulanabilir bir sözleşmeye dönüştürüyor: süreç ağacının boş olduğu kanıtlanır ya da ayrı bir çıkış kodu ve bir denetim kaydı yoluyla öğrenirsiniz. Sandbox'lamayı tamamlar ama onun yerini almaz; yine de standart timeout yardımcı programı dahil çoğu runner'ın yalnızca kısmen ele aldığı bir boşluğu kapatır.

  • #process-management
  • #ci-cd
  • #ai-agents
  • #linux
  • #open-source

İlgili yazılar