2012-04-12 5 views
1

Ich habe einen Bereinigungsvorgang, der den Prozess beenden muss, dessen PID als Argument übergeben wird.Wie einen Prozess in C zu töten, wenn pid ist, wissen

Ich kann sehr gut die kill(pid_t, SIGKILL) verwenden, um es zu töten. Allerdings ist die PID, die ich bekomme, ein ganzzahliger Wert. Also kann ich kein pid_t daraus machen. Gibt es eine Möglichkeit zu verwenden und Ganzzahl-PID, um den Prozess zu beenden?

Gut. Ich kann sehr gut verwenden system("kill -9 <pid>");

ich für eine Lösung von C.

Antwort

2

Wie kam die PID überhaupt in einen Integer-Typ? Wenn Ihre Funktion eine PID nimmt, sollte sie als pid_t gelten. Wenn es ein Textargument ist, sollten Sie es in eine pid_t, nicht eine int analysieren.

Wenn Sie keine ungewöhnliche Situation haben, ist die einzige ganzzahlige Variable, in der Sie eine PID speichern sollten, eine pid_t.

+1

'pid_t' ist ein vorzeichenbehafteter Integer-Typ, daher ist es sicher gültig, pids in' intmax_t' zu speichern. In der Praxis ist es in Ordnung, sie auch in "int" zu speichern. Es ist wahrscheinlich, dass "pid_t" nur erfunden wurde, weil einige hässliche Legacy-Systeme "short" für pids verwendeten, während neuere Systeme "int" verwenden wollten und daher "pid_t" für die Verwendung in den Prototypen erfunden wurde System könnte "pid_t" als "short" oder "int" (oder, was auch immer, etwas anderes) wie gewünscht definieren. –

+0

Soweit ich weiß, gibt es keine Anforderung, dass 'pid_t' ein vorzeichenbehafteter Integer-Typ ist. (Haben Sie ein Zitat?) Es ist nur erforderlich, dass '(pid_t) -1' und' (pid_t) 0' funktionieren und sich nicht mit legitimen PIDs überschneiden. Dies kann sicherlich mit unsigned Integer-Typen geschehen (wie viele Systeme mit "time_t"), und es funktioniert sicherlich auch mit Gleitkommatypen. –

+2

"blksize_t, pid_t und ssize_t müssen Integer-Typen mit Vorzeichen sein." Quelle: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html –

1

Die pid_t eine ganze Zahl signiert ist. Siehe libc. Verwenden Sie einfach den Integer-Wert als erstes Argument in kill

1

pid_t ist ein Datentyp, der in types.h definiert ist. Es ist nur ein vorzeichenbehafteter Integer-Typ.

Haben Sie versucht, Ihre Ganzzahl direkt der Variablen pid_t zuzuordnen? funktioniert es nicht?

Verwandte Themen