SUMMARY FOLLOWUP - forced umount

From: managers account <managers_at_2100-1.mcb.net>
Date: Thu, 16 Sep 1999 09:44:00 +0100 (BST)

So many requests have been received for the fuser program to use on 4.0b
an the script that I am following up by posting them here for the archive.
stuart mckenzie

>From kazuro.furukawa_at_kek.jp Thu Sep 16 09:22:53 1999

On 4.0B fuser(2) was available. I attached a message which have
simple program to list PID's using fuser(2). You may modify this
to kill them.




/*
 * fuser - Reports PIDs and UIDs for files, file systems and/or the devices
attached to them.
 * This is so simple it makes you wonder why DEC didn't bother to
do it themselves.
 *
 * Produced at Pacific Star Communicatons
 *
 * History :
 * 31/12/95 J.Rouse Initial version
 * 31/12/95 D.Bock Added in flags for process type.
 */

#include <stdio.h>
#include <sys/sysinfo.h>
#include <sys/signal.h>
#include <sys/fuser.h>


main(argc,argv)
int argc;
char **argv;
{
  char *file;
  f_user_t fuser_array[10000]; /* Arbitrary array size */
  int i,fuser_count=0;

  if ( argc != 2 ) {
    printf("Usage: fuser FILE\n");
    exit(1);
  }

  file = argv[1];

  /* No buffering */
  setbuf(stdout,NULL);

  fuser_count=fuser(file, 0l, fuser_array, (long) sizeof (fuser_array));
  if ( fuser_count <0 ){
    exit (1);
  } else {
    printf("%s:\n",file);
    if (fuser_count > 0 ){
      for ( i=0; i < fuser_count; i++){
        printf("%d", fuser_array[i].fu_pid);
        if (fuser_array[i].fu_flags & (F_CDIR|F_RDIR))
          printf("c");
        else if (fuser_array[i].fu_flags & (F_PDIR))
          printf("p");
        else if (fuser_array[i].fu_flags & (F_TTY))
          printf("t");
        else if (fuser_array[i].fu_flags & (F_TRACE))
          printf("tr");
        printf(" ");
      };
    };
    printf("\n");
  }

  exit(0);
}



And the script approach:

>From Davis_at_Tessco.Com Thu Sep 16 09:23:11 1999
 


Here is a sample of script that does something
similar to what you want. You probably can't use
this as-is, you'll need to re-write it or adapt
it for your needs.



kill_proc_on () {
  # stop processes with open files.
  ${BINDIR}/bin/fuser -ck $*
}

nfs_wait_loop () {
# function, to wait for a clean umount of mount points
# parameters proc_string, interval

  proc_string=$1; interval=$2; is_running=0
  while [ $is_running -eq 0 ]
  do
    mount | grep -w "$proc_string" | grep -v grep
    is_running=$?
    if [ $is_running -eq 1 ]
    then
      break
    else
      /sbin/umount -f $proc_string
      kill_proc_on $proc_string
      sleep $interval
      is_running=0
    fi
  done
}
Received on Thu Sep 16 1999 - 08:46:33 NZST

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:39 NZDT