2013-10-08 3 views
0

Une tâche cron est créé, et dans la tâche cron contient le code suivant:« système » Linux api

int flag = system("path/main"); 
printf("system return value: %d \n", flag); 

la tâche cron excute tous les jours, et le « drapeau » est généralement « 0 », mais parfois "falg" est "32512". J'ai le code d'erreur google, cela signifie que "la commande n'est pas trouvée".

Mais j'ai besoin de votre aide pour m'éclairer, pourquoi parfois ça va, parfois non. Est-ce important avec le répertoire relatif "path/main"

+0

Nous aurions besoin de plus de détails à ce sujet "parfois". Peut-être que le travail est exécuté dans une politique différente/par un utilisateur différent. –

+0

Désolé pour le manque d'information. Je n'ai pas encore trouvé de loi sur "parfois". Désolé pour cela. – iceKing

+0

[system (3)] (http://man7.org/linux/man-pages/man3/system.3.html) renvoie le statut donné par [waitpid (2)] (http://man7.org /linux/man-pages/man2/waitpid.2.html). Lisez les deux pages man auxquelles je suis connecté. –

Répondre

1

Le code de retour est un masque de bits de plusieurs choses (voir par exemple this question). Dans votre cas, il suggère un code de sortie de 255 (qui est purement de votre processus de l'enfant, pas à cause du signal). Vous devriez vérifier votre programme main.

+0

32512 = 127 * 256, de sorte que le code de retour de shell est de 127. cela signifie "la commande n'a pas été trouvé" – iceKing

+0

Merci pour votre aide. Je voudrais vérifier le code plus attentivement.^_^ – iceKing

+0

@iceKing: Si l'appel de 'system()' n'a pas retourné '-1' et' 127 == WEXITSTATUS (flag) 'alors soit le shell (' bin/sh') qui aurait dû exécuter le * programme * passé à 'system()' n'a pas été trouvé ** ou ** le * programme * lui-même a retourné '127'. Il y a une ambiguïté claire avec cette valeur. – alk