как время управляет работой

Вы могли использовать Perl. Из http://aplawrence.com/Unixart/perlnetftp.html:

#!/usr/bin/perl
my $param = $ARGV[0];
# required modules
 use Net::FTP;
 use File::Listing qw(parse_dir);

 sub getRecursiveDirListing
  {
      # create a new instance of the FTP connection
      my $ftp = Net::FTP->new("fftpserver", Debug=>0) or die("Cannot connect $!");
      # login to the server
      $ftp->login("username","password") or die("Login failed $!");

      # create an array to hold directories, it should be a local variable
      local @dirs = ();

      # directory parameter passed to the sub-routine
      my $dir = $_[0];

      # if the directory was passed onto the sub-routin, change the remote directory
      $ftp->cwd($dir) if($dir);

      # get the file listing
      @ls = $ftp->ls('-lR');

      # the current working directory on the remote server
      my $cur_dir = $ftp->pwd();

      my $totsize = 0;
      my $i = 0;
      my @arr = parse_dir(\@ls);
      my $arrcnt = scalar(@arr);
      if ($arrcnt == 0) {
        print "$cur_dir 0\n"; 
        $ftp->quit();
        exit 1;
      }
      else {
      # parse and loop through the directory listing
      foreach my $file (parse_dir(\@ls))
      {
          $i++;
          my($name, $type, $size, $mtime, $mode) = @$file; 
          $totsize = $totsize + $size if ($type eq 'f');

          print "$cur_dir $totsize\n" if ($i == $arrcnt);

          # recursive call to get the entries in the entry, and get an array of return values
#          @xx = getRecursiveDirListing ("$cur_dir/$name") if ($type eq 'd');
      }

      # close the FTP connection
      $ftp->quit();
      } 
      # merge the array returned from the recursive call with the current directory listing
#      return (@dirs,@xx);
  }
@y = getRecursiveDirListing ("$param");

Выполнять его:

$ ./getSize.pl 

6
06.03.2014, 18:20
2 ответа

в странице справочника времени говорится

Статистические данные команды времени состоят из

(i) прошедшее реальное время между вызовом и завершением,

(ii) пользовательское процессорное время (сумма tms_utime и tms_cutime оценивает в структуре TM, как возвращено ко временам (2)),

(iii) системное процессорное время (сумма tms_stime и tms_cstime оценивает в структуре TM, как возвращено ко временам (2)).

Вы видите это где time команда реализована в c программе.

Общее процессорное время является комбинацией количества времени, ЦП тратит выполнение некоторого действия для программы и количества времени, ЦП тратит работающие системные вызовы ядра от имени программы. Когда программные циклы через массив, это накапливает пользовательское процессорное время. С другой стороны, когда программа выполняет системный вызов, такой как должностное лицо или ветвление, она накапливает системное процессорное время.

Согласно исходному коду реализации GNU времени, большая часть информации, показанной временем, получена из wait3 системного вызова. В системах, которые не имеют вызова wait3, который возвращает информацию о статусе, системный вызов времен используется вместо этого.

5
27.01.2020, 20:22

Ядро отслеживает статистику использования ЦП для всех процессов; time просто просит у ядра информацию о ее дочернем процессе, который, оказывается, команда, которую Вы попросили, чтобы это выполнило. Так как ядро отслеживает эту информацию так или иначе (необходимый для планирования, реализации различных квот ресурса, и т.д.), с помощью time команда не заставляет Вашу команду работать немного медленнее.

10
27.01.2020, 20:22
  • 1
    Интересно хотя ли some_program дочерний процесс time - вызовом команды это походит так - time вызывается и some_program переданный в качестве параметра. –  ren 24.01.2012, 16:51

Теги

Похожие вопросы