waitfor command
git-svn-id: svn://kolibrios.org@6825 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
61afff5eba
commit
0dd49af34c
@ -39,13 +39,16 @@ date
|
||||
echo Выводит <данные> на экран
|
||||
exit завершение работы Shell
|
||||
free показывает объём оперативной памяти: всей, свободной и используемой
|
||||
help показать печень команд shell. С параметром <команда> справка по команде
|
||||
help показать перечень команд shell. С параметром <команда> справка по команде
|
||||
history cписок последних использованных команд
|
||||
kill убивает процесс по <PID>. kill all убивает все пользовательские процессы PID >=2
|
||||
kill убивает процесс по <PID>. kill all убивает все процессы, слоты >=2
|
||||
ls выводит список файлов в текущем каталоге или указанном <каталоге>
|
||||
mkdir cоздает <каталог>. Поддерживаются абсолюные и относительные пути
|
||||
more выводит содержимое <файла> на экран
|
||||
ps показывает список процессов и их PID
|
||||
ps показывает список процессов и их PID,
|
||||
если задать <имя>, покажет %CPU, используемую память и запомнит
|
||||
внутреннюю переменную LASTPID (полезно для команды waitfor)
|
||||
<имя> - это первые 10 букв имени исполняемого файла без расширения
|
||||
pwd показывает имя текущего каталога
|
||||
reboot перезагружает компьютер или ядро KolibriOS. reboot kernel перезапустить ядро Kolibri
|
||||
rm удаляет <файл>
|
||||
@ -53,5 +56,22 @@ rmdir
|
||||
shutdown выключает компьютер
|
||||
sleep приостанавливает работу Shell'а на заданное <время в сотых долях секунды>
|
||||
touch создаёт пустой <файл> или изменяет дату/время создания файла. Не работает
|
||||
uptime показывает время работу системы с момента загрузки
|
||||
ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS, ver cpu - информацию о процессоре
|
||||
uptime показывает время работы системы с момента загрузки
|
||||
ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS,
|
||||
ver cpu - информацию о процессоре
|
||||
waitfor если перед этим была запущена программа, приостанавливает
|
||||
выполнение командного файла до ее завершения по LASTPID
|
||||
или до завершения явно указанного параметра <PID>
|
||||
|
||||
Скрипты и запуск на исполнение
|
||||
=======================================
|
||||
Если имя исполнимого файла начинается с / то считается что путь является абсолютным.
|
||||
В противном случае, поиск сначала проводится в текущем каталоге, а затем в /rd/1.
|
||||
|
||||
Далее, если файл найден, проверяются первые 4 байта на сигнатуру #SHS.
|
||||
С этой сигнатуры начинается командный (пакетный) файл.
|
||||
В командном файле допустимы все команды приведенные выше, а комментарии
|
||||
начинаются с символа # в первой позиции строки.
|
||||
|
||||
Если на выполнение был задан исполняемый файл, запомнит LASTPID
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
Shell 0.7.5 // 01.01.2017 // Siemargl
|
||||
Shell 0.7.5 // 06.01.2017 // Siemargl
|
||||
* <20>¥«×¨¥ ¡ £ה¨×בכ, ¨§¬¥¥ «®£¨× ®¡א ¡®גר בגא¥«®× ¢¢¥או/¢¨§, חג®¡כ × × ד ¢ב¥ו
|
||||
„®¡ ¢«¥ ª®¬ ¤ waitfor ¨ ¢ ਠâ ps á ¯ à ¬¥â஬
|
||||
|
||||
Shell 0.7.4 // 23.01.2014 // Albom
|
||||
* <20> ¡®ג ב ¡דה¥א®¬ ®¡¬¥ (×®¯¨א®¢ ¨¥ Ctrl+C ¨ ¢בג ¢× Ctrl+V בגא®×¨ ז¥«¨×®¬)
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "cmd/cmd_uptime.c"
|
||||
#include "cmd/cmd_history.c"
|
||||
#include "cmd/cmd_cp.c"
|
||||
#include "cmd/cmd_waitfor.c"
|
||||
|
||||
#include "modules/module_command.c"
|
||||
#include "modules/module_program_console.c"
|
||||
|
@ -1,5 +1,6 @@
|
||||
#SHS
|
||||
|
||||
about
|
||||
echo Type 'help' for help
|
||||
echo
|
||||
ver kernel
|
||||
echo
|
||||
echo Type 'help' for help
|
||||
echo
|
||||
|
@ -2,7 +2,7 @@
|
||||
int cmd_ps(char param[])
|
||||
{
|
||||
|
||||
int i, n;
|
||||
int i, n, sel;
|
||||
char *buf1k;
|
||||
unsigned PID;
|
||||
short STATE;
|
||||
@ -11,13 +11,26 @@ buf1k = malloc(1024);
|
||||
if (NULL == buf1k)
|
||||
return FALSE;
|
||||
|
||||
sel = param && strlen(param) > 0;
|
||||
|
||||
for (i = 1;;i++)
|
||||
{
|
||||
n = kol_process_info(i, buf1k);
|
||||
PID = *(buf1k+30);
|
||||
STATE = *(buf1k+50);
|
||||
if ( 9 != STATE)
|
||||
printf (" %7d %s\n\r", PID, buf1k+10);
|
||||
if (9 != STATE)
|
||||
{
|
||||
if (!sel || 0 == strnicmp(param, buf1k+10, 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)
|
||||
break;
|
||||
}
|
||||
|
52
programs/system/shell/cmd/cmd_waitfor.c
Normal file
52
programs/system/shell/cmd/cmd_waitfor.c
Normal 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;
|
||||
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ char CMD[256];
|
||||
char CMD_HISTORY[CMD_HISTORY_NUM][256];
|
||||
char CMD_NUM = 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_history(char arg[]);
|
||||
int cmd_cp(char param[]);
|
||||
|
||||
int cmd_waitfor(char param[]);
|
||||
|
||||
/// ===========================================================
|
||||
|
||||
|
@ -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},
|
||||
{"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},
|
||||
{"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},
|
||||
{"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},
|
||||
@ -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},
|
||||
{"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},
|
||||
{"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},
|
||||
};
|
||||
|
||||
|
@ -16,7 +16,7 @@ const command_t COMMANDS[]=
|
||||
{"ls", " ‚뢮¤¨â ᯨ᮪ ä ©«®¢. ˆá¯®«ì§®¢ ¨¥:\n\r ls ;ᯨ᮪ ä ©«®¢ ¢ ⥪ã饬 ª â «®£¥\n\r ls <¤¨à¥ªâ®à¨ï> ;ᯨ᮪ ä ©«®¢ ¨§ § ¤ ®© ¤¨à¥ªâ®à¨¨\n\r", &cmd_ls},
|
||||
{"mkdir", " ‘®§¤ ¥â ª â «®£. ˆá¯®«ì§®¢ ¨¥:\n\r mkdir <¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¢ ⥪ã饬 ª â «®£¥\n\r mkdir <¯ãâì><¨¬ï ¯ ¯ª¨> ;ᮧ¤ âì ¯ ¯ªã ¯® 㪠§ ®¬ã ¯ãâ¨\n\r", &cmd_mkdir},
|
||||
{"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},
|
||||
{"reboot", " <20>¥à¥§ £à㦠¥â ª®¬¯ìîâ¥à ¨«¨ ï¤à® KolibriOS. ˆá¯®«ì§®¢ ¨¥:\n\r reboot ;¯¥à¥§ £à㧨âì <20>Š\n\r reboot kernel ;¯¥à¥§ ¯ãáâ¨âì ï¤à® Kolibri\n\r", &cmd_reboot},
|
||||
{"rm", " “¤ «ï¥â ä ©«. ˆá¯®«ì§®¢ ¨¥:\n\r rm <¨¬ï ä ©« >\n\r", &cmd_rm},
|
||||
@ -26,5 +26,6 @@ const command_t COMMANDS[]=
|
||||
{"touch", " ‘®§¤ ñâ ¯ãá⮩ ä ©« ¨«¨ ¨§¬¥ï¥â ¤ âã/¢à¥¬ï ᮧ¤ ¨ï ä ©« . ˆá¯®«ì§®¢ ¨¥:\n\r touch <¨¬ï ä ©« >\n\r", &cmd_touch},
|
||||
{"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},
|
||||
{"waitfor", " <20>ਮáâ ¢«¨¢ ¥â ¢ë¯®«¥¨¥ ª®¬ ¤. ˆá¯®«ì§®¢ ¨¥:\n\r waitfor ;®¦¨¤ ¥¬ ¯à¥¤ë¤ã騩 § ¯ãé¥ë© ¯à®æ¥áá LASTPID\n\r waitfor <PID>;¦¤¥¬ § ¢¥àè¥¨ï ¯à®æ¥áá á 㪠§ ë¬ PID\n\r", &cmd_waitfor},
|
||||
};
|
||||
|
||||
|
@ -8,6 +8,8 @@ int i;
|
||||
|
||||
if ('\0' == CMD[0]) return;
|
||||
|
||||
CMD_NUM = -1;
|
||||
|
||||
for (i = 0; i < CMD_HISTORY_NUM_REAL; i++)
|
||||
if ( 0 == strcmp( CMD_HISTORY[i], CMD ) )
|
||||
return;
|
||||
@ -20,8 +22,6 @@ strcpy(CMD_HISTORY[0], CMD);
|
||||
if (CMD_HISTORY_NUM_REAL < CMD_HISTORY_NUM-1)
|
||||
CMD_HISTORY_NUM_REAL++;
|
||||
|
||||
CMD_NUM = -1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,6 +48,7 @@ if (result > 0)
|
||||
|
||||
if ( !program_console(result) )
|
||||
{
|
||||
LAST_PID = result;
|
||||
#if LANG_ENG
|
||||
printf (" '%s' started. PID = %d\n\r", cmd, result);
|
||||
#elif LANG_RUS
|
||||
|
@ -55,22 +55,40 @@ int strcmp(const char* string1, const char* string2)
|
||||
{
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (*string1<*string2)
|
||||
return -1;
|
||||
if (*string1>*string2)
|
||||
return 1;
|
||||
|
||||
if (*string1=='\0')
|
||||
return 0;
|
||||
|
||||
string1++;
|
||||
string2++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int strnicmp(const char* string1, const char* string2, unsigned count)
|
||||
{
|
||||
if (*string1<*string2)
|
||||
return -1;
|
||||
if (*string1>*string2)
|
||||
return 1;
|
||||
int pc = 0;
|
||||
while (1)
|
||||
{
|
||||
if (toupper(*string1)<toupper(*string2))
|
||||
return -1;
|
||||
if (toupper(*string1)>toupper(*string2))
|
||||
return 1;
|
||||
|
||||
if (*string1=='\0')
|
||||
return 0;
|
||||
if (*string1=='\0' || pc == count)
|
||||
return 0;
|
||||
|
||||
string1++;
|
||||
string2++;
|
||||
string1++;
|
||||
string2++;
|
||||
pc++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void strcpy(char strDest[], const char strSource[])
|
||||
{
|
||||
unsigned i;
|
||||
|
@ -18,3 +18,4 @@ void _itoa(int i, char *s);
|
||||
void reverse(char *s);
|
||||
void itoa(int i, char *s);
|
||||
int _atoi( char *s );
|
||||
int strnicmp(const char* string1, const char* string2, unsigned count);
|
||||
|
Loading…
Reference in New Issue
Block a user