fork()
sistem çağrısına aşırı yükledim ve RTLD_NEXT kullanarak kendi sürümüm fork()
'u oluşturdum. Yani, dlsym(RTLD_NEXT, fork)
. Bu benim çatal sürümüne vuracak. Bundan sonra, gerçek fork()
sistem çağrısının görevini çoğaltmak istiyorum; yani, alt işlem oluşturmak ve pid'i döndürmek ve bazı daha fazla işlevsellik.Aşırı yükleme çatalı()
Bunu nasıl yapacağımı anlayamıyorum. fork()
(fork.c) için çekirdek kaynak kodunu kontrol ettim ve çok fazla şey anlayamadım.
Bunu yapmak:
dlsym(RTLD_NEXT,fork);
int fork(void) {
int pid=_fork(); // Trying to call actual fork does not work
return pid;
}
Bunu nasıl yapabilirim? (Yorumlardan çekti) http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10
Düzenleme: Burada çatal için kaynak kodu çekirdek link
Ben aracı tespit sızıntı üzerinde çalışıyorum ve alet çift serbest bir çocuk sürecini algılar Ebeveyn tarafından ayrılan belleği siler. Bunu aşmak için fork()
'u geçersiz kılacağım ve bir fork()
olduğu zaman, ebeveynin bellek ayırma tablosu çocuğa çoğaltılacaktır.
"Çalışmıyor" ile ne demek istiyorsun? Çalışma zamanı hataları? Derleyici hataları? – Simone
@ Simone: _fork(); // Hata: _fork bildirilmedi. Benim fikrim, onun, çatalın gerçek çekirdek versiyonunu vurmasını ve benimkini yapmamasını sağlamaktı. Umarım şimdi açık hale getirir. – kingsmasher1
Tam olarak ne yaparak bunu yapmak ister misiniz? Son hedefin nedir? – Omnifarious