2013-07-04 2 views
2

Я реализую простой планировщик заданий, который охватывает новый процесс для каждой выполняемой работы. Когда работа завершается, я хочу, чтобы она сообщала количество действий, выполняемых планировщику.Возможно ли использовать ненулевой код возврата для успешного процесса?

Самый простой способ, которым я мог найти, - это выйти с количеством действий в качестве кода возврата. Этот процесс, например, завершил бы с кодом возврата 3 для «3 выполненных действий».

Но если стандартным (AFAIK) является использование кода возврата 0 при успешном завершении процесса и любом другом значении при ошибке en, ​​может ли этот подход создать угрозу для возникновения каких-либо проблем?


Примечание: дочерний процесс не является выполнимым скриптом, а вилка родителя, поэтому не доступен из внешнего мира.

+1

Обычно положительный код возврата указывает на успех, но с чем-то, что не пошло * совершенно * правильно, -ve возвращают коды, являются ошибками. – Joe

ответ

0

Я бы использовал для этого журналы: зарегистрируйте количество действий, выполняемых планировщику. Таким образом, вы также можете записывать данные и другую дополнительную информацию.

Я не изменил бы возвратные конвенции ...

0

Если планировщик охватывает ребенок, и вы пишете, что вы могли бы также открыть трубу на ребенок, или именованные каналы или возможно сокеты Unix, и использование что для взаимодействия между процессами и написания обработанных заданий.

Я бы придерживался условностей, а именно возвращал 0 для успеха, особенно если ваша программа видна/доступна другим людям или, во всяком случае, хорошо документирует эти решения.

В любом случае, кроме конвенций, есть также standards.

+0

Означает ли факт, что это процесс, раздвоенный из родителя (а не исполняемый скрипт), что-то изменит? – Benjamin

+0

Нет, это не так, я на самом деле ссылался на дочерние родительские процессы там, и в некоторых случаях вам также облегчается тот факт, что когда вы используете fork, ваши файловые дескрипторы * унаследованы * (man fork для получения дополнительной информации), вы также могут иметь внешние скрипты, которые мало знают друг друга, если вы хотите использовать именованные каналы или связь внешнего типа. – DRC

+0

Возможно, вы имели в виду, если он что-то изменит, чтобы иметь стандарты или нет, даже если процесс является внутренним. Я думаю, что существуют стандарты для того, чтобы помочь программистам обмениваться знаниями и соглашениями, если когда-нибудь я подберу ваш код, и если это ** легко ** для меня понять ваши соглашения, вы приняли правильное решение, иначе подумайте дважды об этом:) – DRC

1

Единственный риск заключается в запутывании вызывающего сценария. То, что вы описали, имеет смысл, поскольку то, что вы действительно хотите, - это счет. Как сказал Джо, используйте отрицательные значения для сбоев, и вы должны рассмотреть возможность включения опции -help, которая объясняет возвращаемые значения ... поэтому вы можете выяснить, что делает этот код, когда вы пытаетесь использовать его в следующем месяце.

+0

На самом деле это процесс, раздвоенный из родителя, поэтому не может быть такой вещи, как вызывающий скрипт! – Benjamin

+0

Я в этом случае, это прекрасно «ОК». Это не «стандарт» под Unix, но кто заботится. Это не незаконно. – Damon

+0

Benjamin - Вы не должны забывать, что вполне возможно, что вы поймете в недалеком будущем, насколько полезен этот сценарий и назовите его из многих других скриптов. :-) – Steve

2

Что вы ищете интер связи процесс - и есть много способов сделать это:

  • Sockets
  • Shared памяти
  • Трубы
  • Эксклюзивные дескрипторы (в некоторой степени, скорее сделайте что-нибудь еще, если сможете)
  • ...

Изменения условных условий возврата - это не то, что обычный программист должен осмелиться нарушить.

+0

Честно говоря, я бы осмелился сделать это в этом конкретном случае. Другие решения, безусловно, «более чисты», но ОП интересовался простым решением (возвращающим число из 'main' _is simple_) и учитывая, что процесс forking знает, что обычное соглашение не соблюдается (и не важно, потому что все, на что он обращается, - это число), это приемлемое решение, на мой взгляд. – Damon

+0

@Damon Forking может быть исключением, и если нужно только одно единственное число для быстрого взлома, это действительно хорошо. Но, как правило, вам нужно больше одного номера из ваших разветвленных/других процессов (и будь то только для сбора статистики, отладки). Более чистым способом было бы использовать ipc с самого начала, как правило, впоследствии сохраняет какой-то редизайн (это то, что говорит мой опыт, но ваш может отличаться, и я, вероятно, не так впечатлен, как вы ...). – drahnr

Смежные вопросы