waitfor command

git-svn-id: svn://kolibrios.org@6825 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
siemargl 2017-01-06 16:12:57 +00:00
parent 61afff5eba
commit 0dd49af34c
13 changed files with 139 additions and 28 deletions

View File

@ -39,13 +39,16 @@ date
echo Выводит <данные> на экран echo Выводит <данные> на экран
exit завершение работы Shell exit завершение работы Shell
free показывает объём оперативной памяти: всей, свободной и используемой free показывает объём оперативной памяти: всей, свободной и используемой
help показать печень команд shell. С параметром <команда> справка по команде help показать перечень команд shell. С параметром <команда> справка по команде
history cписок последних использованных команд history cписок последних использованных команд
kill убивает процесс по <PID>. kill all убивает все пользовательские процессы PID >=2 kill убивает процесс по <PID>. kill all убивает все процессы, слоты >=2
ls выводит список файлов в текущем каталоге или указанном <каталоге> ls выводит список файлов в текущем каталоге или указанном <каталоге>
mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути
more выводит содержимое <файла> на экран more выводит содержимое <файла> на экран
ps показывает список процессов и их PID ps показывает список процессов и их PID,
если задать <имя>, покажет %CPU, используемую память и запомнит
внутреннюю переменную LASTPID (полезно для команды waitfor)
<имя> - это первые 10 букв имени исполняемого файла без расширения
pwd показывает имя текущего каталога pwd показывает имя текущего каталога
reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri
rm удаляет <файл> rm удаляет <файл>
@ -53,5 +56,22 @@ rmdir
shutdown выключает компьютер shutdown выключает компьютер
sleep приостанавливает работу Shell'а на заданное <время в сотых долях секунды> sleep приостанавливает работу Shell'а на заданное <время в сотых долях секунды>
touch создаёт пустой <файл> или изменяет дату/время создания файла. Не работает touch создаёт пустой <файл> или изменяет дату/время создания файла. Не работает
uptime показывает время работу системы с момента загрузки uptime показывает время работы системы с момента загрузки
ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS, ver cpu - информацию о процессоре ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS,
ver cpu - информацию о процессоре
waitfor если перед этим была запущена программа, приостанавливает
выполнение командного файла до ее завершения по LASTPID
или до завершения явно указанного параметра <PID>
Скрипты и запуск на исполнение
=======================================
Если имя исполнимого файла начинается с / то считается что путь является абсолютным.
В противном случае, поиск сначала проводится в текущем каталоге, а затем в /rd/1.
Далее, если файл найден, проверяются первые 4 байта на сигнатуру #SHS.
С этой сигнатуры начинается командный (пакетный) файл.
В командном файле допустимы все команды приведенные выше, а комментарии
начинаются с символа # в первой позиции строки.
Если на выполнение был задан исполняемый файл, запомнит LASTPID

View File

@ -1,5 +1,6 @@
Shell 0.7.5 // 01.01.2017 // Siemargl Shell 0.7.5 // 06.01.2017 // Siemargl
* <20>¥«×¨¥ ¡ £ה¨×בכ, ¨§¬¥­¥­  «®£¨×  ®¡א ¡®גר בגא¥«®× ¢¢¥או/¢­¨§, חג®¡כ × × ד ¢ב¥ו * <20>¥«×¨¥ ¡ £ה¨×בכ, ¨§¬¥­¥­  «®£¨×  ®¡א ¡®גר בגא¥«®× ¢¢¥או/¢­¨§, חג®¡כ × × ד ¢ב¥ו
„®¡ ¢«¥­  ª®¬ ­¤  waitfor ¨ ¢ à¨ ­â ps á ¯ à ¬¥â஬
Shell 0.7.4 // 23.01.2014 // Albom Shell 0.7.4 // 23.01.2014 // Albom
* <20> ¡®ג  ב ¡דה¥א®¬ ®¡¬¥­  (×®¯¨א®¢ ­¨¥ Ctrl+C ¨ ¢בג ¢×  Ctrl+V בגא®×¨ ז¥«¨×®¬) * <20> ¡®ג  ב ¡דה¥א®¬ ®¡¬¥­  (×®¯¨א®¢ ­¨¥ Ctrl+C ¨ ¢בג ¢×  Ctrl+V בגא®×¨ ז¥«¨×®¬)

View File

@ -42,6 +42,7 @@
#include "cmd/cmd_uptime.c" #include "cmd/cmd_uptime.c"
#include "cmd/cmd_history.c" #include "cmd/cmd_history.c"
#include "cmd/cmd_cp.c" #include "cmd/cmd_cp.c"
#include "cmd/cmd_waitfor.c"
#include "modules/module_command.c" #include "modules/module_command.c"
#include "modules/module_program_console.c" #include "modules/module_program_console.c"

View File

@ -1,5 +1,6 @@
#SHS #SHS
echo
about ver kernel
echo
echo Type 'help' for help echo Type 'help' for help
echo echo

View File

@ -2,7 +2,7 @@
int cmd_ps(char param[]) int cmd_ps(char param[])
{ {
int i, n; int i, n, sel;
char *buf1k; char *buf1k;
unsigned PID; unsigned PID;
short STATE; short STATE;
@ -11,13 +11,26 @@ buf1k = malloc(1024);
if (NULL == buf1k) if (NULL == buf1k)
return FALSE; return FALSE;
sel = param && strlen(param) > 0;
for (i = 1;;i++) for (i = 1;;i++)
{ {
n = kol_process_info(i, buf1k); n = kol_process_info(i, buf1k);
PID = *(buf1k+30); PID = *(buf1k+30);
STATE = *(buf1k+50); STATE = *(buf1k+50);
if (9 != STATE) if (9 != STATE)
{
if (!sel || 0 == strnicmp(param, buf1k+10, 10))
{
printf (" %7d %s\n\r", PID, buf1k+10); printf (" %7d %s\n\r", PID, buf1k+10);
if (sel)
{
LAST_PID = PID;
int cpu_tck = kol_system_cpufreq() / 100;
printf (" CPU %d%% RAM %d\n\r", *(int*)buf1k / cpu_tck , *(int*)(buf1k+26)+1);
}
}
}
if (i == n) if (i == n)
break; break;
} }

View File

@ -0,0 +1,52 @@
int cmd_waitfor(char param[])
// waits for LASTPID or pid in param
{
int i, n, sel, sel_pid;
char *buf1k;
unsigned PID;
short STATE;
sel = param && strlen(param) > 0;
sel_pid = LAST_PID;
if (sel)
{
sel_pid = _atoi(param);
}
if (0 == sel_pid)
return FALSE;
#if LANG_ENG
printf(" Awaing finish PID %d\n\r", sel_pid);
#elif LANG_RUS
printf(" Ž¦¨¤ ¥¬ § ¢¥à襭¨ï PID %d\n\r", sel_pid);
#endif
buf1k = malloc(1024);
if (NULL == buf1k)
return FALSE;
while(1)
{
for (i = 1;;i++)
{
n = kol_process_info(i, buf1k);
PID = *(buf1k+30);
STATE = *(buf1k+50);
if (PID == sel_pid)
if(9 == STATE)
goto exit_normal;
else break;
if (i == n)
goto exit_normal;
}
kol_sleep(10); // 100ms
}
exit_normal:
free(buf1k);
return TRUE;
}

View File

@ -20,6 +20,7 @@ char CMD[256];
char CMD_HISTORY[CMD_HISTORY_NUM][256]; char CMD_HISTORY[CMD_HISTORY_NUM][256];
char CMD_NUM = 0; char CMD_NUM = 0;
char CMD_HISTORY_NUM_REAL = 0; char CMD_HISTORY_NUM_REAL = 0;
unsigned LAST_PID = 0;
/// =========================================================== /// ===========================================================
@ -66,7 +67,7 @@ int cmd_uptime(char param[]);
int cmd_killall(char process_name[]); int cmd_killall(char process_name[]);
int cmd_history(char arg[]); int cmd_history(char arg[]);
int cmd_cp(char param[]); int cmd_cp(char param[]);
int cmd_waitfor(char param[]);
/// =========================================================== /// ===========================================================

View File

@ -16,7 +16,7 @@ const command_t COMMANDS[]=
{"ls", " Lists the files in a directory. Usage:\n\r ls ;lists the files in current directory\n\r ls <directory> ;lists the files at specified folder\n\r", &cmd_ls}, {"ls", " Lists the files in a directory. Usage:\n\r ls ;lists the files in current directory\n\r ls <directory> ;lists the files at specified folder\n\r", &cmd_ls},
{"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir}, {"mkdir", " Makes directory. Usage:\n\r mkdir <folder name> ;creates the folder in working directory\n\r mkdir <path><folder name> ;create folder by specified path\n\r", &cmd_mkdir},
{"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more}, {"more", " Displays a file data to the screen. Usage:\n\r more <file name>\n\r", &cmd_more},
{"ps", " Lists the current processes running\n\r", &cmd_ps}, {"ps", " Lists the current processes running\n\r or shows more info on <procname> and save LASTPID\n\r", &cmd_ps},
{"pwd", " Displays the name of the working directory\n\r", &cmd_pwd}, {"pwd", " Displays the name of the working directory\n\r", &cmd_pwd},
{"reboot", " Reboots the computer or KolibriOS kernel. Usage:\n\r reboot ;reboot a PC\n\r reboot kernel ;reboot the KolibriOS kernel\n\r", &cmd_reboot}, {"reboot", " Reboots the computer or KolibriOS kernel. Usage:\n\r reboot ;reboot a PC\n\r reboot kernel ;reboot the KolibriOS kernel\n\r", &cmd_reboot},
{"rm", " Removes a file. Usage:\n\r rm file name>\n\r", &cmd_rm}, {"rm", " Removes a file. Usage:\n\r rm file name>\n\r", &cmd_rm},
@ -26,5 +26,6 @@ const command_t COMMANDS[]=
{"touch", " Creates an empty file or updates the time/date stamp on a file. Usage:\n\r touch <file name>\n\r", &cmd_touch}, {"touch", " Creates an empty file or updates the time/date stamp on a file. Usage:\n\r touch <file name>\n\r", &cmd_touch},
{"uptime", " Displays the uptime\n\r", &cmd_uptime}, {"uptime", " Displays the uptime\n\r", &cmd_uptime},
{"ver", " Displays version. Usage:\n\r ver ;Shell version\n\r ver kernel ;version of KolibriOS kernel\n\r ver cpu ;information about CPU\n\r", &cmd_ver}, {"ver", " Displays version. Usage:\n\r ver ;Shell version\n\r ver kernel ;version of KolibriOS kernel\n\r ver cpu ;information about CPU\n\r", &cmd_ver},
{"waitfor", " Stops console waiting while process finish. Usage:\n\r waitfor ;waiting previous started executable LASTPID\n\r waitfor <PID>;awaiting PID finish\n\r", &cmd_waitfor},
}; };

View File

@ -16,7 +16,7 @@ const command_t COMMANDS[]=
{"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls}, {"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ­¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ­­®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls},
{"mkdir", " ‘®§¤ ¥â ª â «®£. ˆá¯®«ì§®¢ ­¨¥:\n\r mkdir <¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¢ ⥪ã饬 ª â «®£¥\n\r mkdir <¯ãâì><¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¯® 㪠§ ­­®¬ã ¯ãâ¨\n\r", &cmd_mkdir}, {"mkdir", " ‘®§¤ ¥â ª â «®£. ˆá¯®«ì§®¢ ­¨¥:\n\r mkdir <¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¢ ⥪ã饬 ª â «®£¥\n\r mkdir <¯ãâì><¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¯® 㪠§ ­­®¬ã ¯ãâ¨\n\r", &cmd_mkdir},
{"more", " ‚뢮¤¨â ᮤ¥à¦¨¬®¥ ä ©«  ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r more <¨¬ï ä ©« >\n\r", &cmd_more}, {"more", " ‚뢮¤¨â ᮤ¥à¦¨¬®¥ ä ©«  ­  íªà ­. ˆá¯®«ì§®¢ ­¨¥:\n\r more <¨¬ï ä ©« >\n\r", &cmd_more},
{"ps", " ‚뢮¤¨â ᯨ᮪ ¯à®æ¥áᮢ\n\r", &cmd_ps}, {"ps", " ‚뢮¤¨â ᯨ᮪ ¯à®æ¥áᮢ\n\r …᫨ 㪠§ ­® <¨¬ï¯à®æ¥áá >, ¯®ª §ë¢ ¥â ¡®«ìè¥ ¤ ­­ëå ¨ á®åà ­ï¥â LASTPID\n\r", &cmd_ps},
{"pwd", " <20>®ª §ë¢ ¥â ¨¬ï ⥪ã饩 ¤¨à¥ªâ®à¨¨\n\r", &cmd_pwd}, {"pwd", " <20>®ª §ë¢ ¥â ¨¬ï ⥪ã饩 ¤¨à¥ªâ®à¨¨\n\r", &cmd_pwd},
{"reboot", " <20>¥à¥§ £à㦠¥â ª®¬¯ìîâ¥à ¨«¨ ï¤à® KolibriOS. ˆá¯®«ì§®¢ ­¨¥:\n\r reboot ;¯¥à¥§ £à㧨âì <20>Š\n\r reboot kernel ;¯¥à¥§ ¯ãáâ¨âì ï¤à® Kolibri\n\r", &cmd_reboot}, {"reboot", " <20>¥à¥§ £à㦠¥â ª®¬¯ìîâ¥à ¨«¨ ï¤à® KolibriOS. ˆá¯®«ì§®¢ ­¨¥:\n\r reboot ;¯¥à¥§ £à㧨âì <20>Š\n\r reboot kernel ;¯¥à¥§ ¯ãáâ¨âì ï¤à® Kolibri\n\r", &cmd_reboot},
{"rm", " “¤ «ï¥â ä ©«. ˆá¯®«ì§®¢ ­¨¥:\n\r rm <¨¬ï ä ©« >\n\r", &cmd_rm}, {"rm", " “¤ «ï¥â ä ©«. ˆá¯®«ì§®¢ ­¨¥:\n\r rm <¨¬ï ä ©« >\n\r", &cmd_rm},
@ -26,5 +26,6 @@ const command_t COMMANDS[]=
{"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥­ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ­¨ï ä ©« . ˆá¯®«ì§®¢ ­¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch}, {"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥­ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ­¨ï ä ©« . ˆá¯®«ì§®¢ ­¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch},
{"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime}, {"uptime", " <20>®ª §ë¢ ¥â uptime\n\r", &cmd_uptime},
{"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r ver cpu ;¨­ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver}, {"ver", " <20>®ª §ë¢ ¥â ¢¥àá¨î. ˆá¯®«ì§®¢ ­¨¥:\n\r ver ;¢¥àá¨ï Shell\n\r ver kernel ;¢¥àá¨ï ¨ ­®¬¥à ॢ¨§¨¨ ï¤à  KolibriOS\n\r ver cpu ;¨­ä®à¬ æ¨ï ® ¯à®æ¥áá®à¥\n\r", &cmd_ver},
{"waitfor", " <20>ਮáâ ­ ¢«¨¢ ¥â ¢ë¯®«­¥­¨¥ ª®¬ ­¤. ˆá¯®«ì§®¢ ­¨¥:\n\r waitfor ;®¦¨¤ ¥¬ ¯à¥¤ë¤ã騩 § ¯ã饭­ë© ¯à®æ¥áá LASTPID\n\r waitfor <PID>;¦¤¥¬ § ¢¥à襭¨ï ¯à®æ¥áá  á 㪠§ ­­ë¬ PID\n\r", &cmd_waitfor},
}; };

View File

@ -8,6 +8,8 @@ int i;
if ('\0' == CMD[0]) return; if ('\0' == CMD[0]) return;
CMD_NUM = -1;
for (i = 0; i < CMD_HISTORY_NUM_REAL; i++) for (i = 0; i < CMD_HISTORY_NUM_REAL; i++)
if ( 0 == strcmp( CMD_HISTORY[i], CMD ) ) if ( 0 == strcmp( CMD_HISTORY[i], CMD ) )
return; return;
@ -20,8 +22,6 @@ strcpy(CMD_HISTORY[0], CMD);
if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1) if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1)
CMD_HISTORY_NUM_REAL++; CMD_HISTORY_NUM_REAL++;
CMD_NUM = -1;
} }

View File

@ -48,6 +48,7 @@ if (result > 0)
if ( !program_console(result) ) if ( !program_console(result) )
{ {
LAST_PID = result;
#if LANG_ENG #if LANG_ENG
printf (" '%s' started. PID = %d\n\r", cmd, result); printf (" '%s' started. PID = %d\n\r", cmd, result);
#elif LANG_RUS #elif LANG_RUS

View File

@ -70,6 +70,24 @@ string2++;
} }
int strnicmp(const char* string1, const char* string2, unsigned count)
{
int pc = 0;
while (1)
{
if (toupper(*string1)<toupper(*string2))
return -1;
if (toupper(*string1)>toupper(*string2))
return 1;
if (*string1=='\0' || pc == count)
return 0;
string1++;
string2++;
pc++;
}
}
void strcpy(char strDest[], const char strSource[]) void strcpy(char strDest[], const char strSource[])
{ {

View File

@ -18,3 +18,4 @@ void _itoa(int i, char *s);
void reverse(char *s); void reverse(char *s);
void itoa(int i, char *s); void itoa(int i, char *s);
int _atoi( char *s ); int _atoi( char *s );
int strnicmp(const char* string1, const char* string2, unsigned count);