DÜZENLEME (YAPILANDIRMA İLERLEME):Çok iş parçacıklı bir uygulama nasıl yapılır?
Bir vsftpd arka planına ptrace yapmaya çalışıyorum. Daemon'a bağlanan şu kodum var. Ardından, ilk ortaya çıkan işlemin PID'sini başarıyla görüntüler. Bununla birlikte, bu yumurtlama sürecinin çocukları için PID'leri 2,3 olarak döndürür. Program, ortaya çıkan süreçlerin çıkmasını yakalar, bu da bana yakın olduğumu düşünür.
Herhangi bir fikrin var mı?
void * trace_process(void * pid){
pid_t child = atoi((char *) pid);
long orig_eax, eax;
int status;
int callmade = FALSE;
long opt = PTRACE_O_TRACEFORK;
long newpid;
long trace = ptrace(PTRACE_ATTACH,child,NULL,NULL);
ptrace(PTRACE_SETOPTIONS,child,NULL,opt);
if(trace == FALSE)
printf("Attached to %d\n",child);
while(TRUE) {
child = waitpid(-1, &status, __WALL);
if (status >> 16 == PTRACE_EVENT_FORK) {
ptrace(PTRACE_GETEVENTMSG, child, NULL, (long) &newpid);
ptrace(PTRACE_SYSCALL, newpid, NULL, NULL);
printf("Attached to offspring %ld\n", newpid);
}
else{
if(WIFEXITED(status))
printf("Child %d exited\n", child);
}
ptrace(PTRACE_SYSCALL,child, NULL, NULL);
}
}
Örnek çıktı:
Attached to 2015 // daemon
Attached to offspring 5302 // new connection handler
Attached to offspring 2 // should be authenticator
Child 5303 exited // authenticator exiting on successful login
Attached to offspring 3 // should be process serving files
Child 5304 exited // logout: process serving files
Child 5302 exited // connection closed
Attached to offspring 5305 // new connection handler
Attached to offspring 2 // ... repeat
Child 5306 exited
Attached to offspring 3
Child 5307 exited
Child 5305 exited
Eğer strace (1) 'baktınız mı' hiç? –
@Nikolai N Fetissov Şimdi strace kaynağına bakıyorum. Geçmesi tam olarak kolay değil. Daha ilginç olan şey, ben vsftpd pidine strace ekledim ve ncftp kullanarak giriş yaptığımda "bağlanıyor ..." diyaloğunda asılı kalmam. Strace'den ctrl-c olduğunda düzgün şekilde devam eder. Yani strace de çalışmıyor. – ofosho
'-f' seçeneğini kullandınız mı? –