doubts reg inodes

Dear all,
We have a logfile which is written into by a background process running continuously. This logfile size keeps increasing rapidly. While trying to manipulate the file, we deleted the file from the directory. But the process kept on writing into the file and the directory space got filled up.
According to inode concept, the file is not completely removed until the last reference to the inode is gone.
My question is how to trace these inodes which exist even after the files get deleted but a process is working on it.
Please let me know if i am not clear.

AFAIK you will have to stop the continuous process and restart it. Otherwise the disk will fill up.

Unless there is a lock on the file

> path/to/file

will truncate the file, even while the logger is writing to it. So I don't get what other manipulations you would need - maybe "tail -10000 >anotherfile " the last entries if you need them.

inodes ? hmm is this file opened by the process. or are you only redirecting the output of the process to this file. Looking at your scenario, i bliv it is the process who opens this file for writing. if the process creates it, then deleting should stop adding to the log, unless your program handles creation of the file again, while logging. So if you want this to stop, then your logging should have a logic not to recreate a file if it doesnt find one.
second, if the logging fails, the process should also close the log file descriptor. which if left open may recreate the file and write. ( it depends mostly on ur process, how it handles this log file)

if you are simply redirecting the log to the file, one way to stop logging is chmod and chown of this log file so that there are no write permissions on this file. the process ll stop logging into it further (and probably may even crash :slight_smile: )

Thanks a lot. It was quite helpful. Actually we are killing the process now to handle the situation.

chmod has no effect on a file descriptor that is already open. The code will keep writing to the file. This is because permissions checking occurs only when the process first tries to open the file.

/* filetest.c will this keep writing after a chmod on the file mid-way? */
#include <stdio.h>
#include <stdlib.h>

#define ck(x)if((x)==1){perror("error on file");exit(EXIT_FAILURE);}
int main()
{
	FILE *out=fopen("./myfile","w");
	char tmp[32]={0x0};
	int i=0;

	for(i=0;i<1000;i++) ck(fprintf(out,"%d\n",i));
	printf("We are pausing now... push <Enter> to continue.. ");    
	fgets(tmp,sizeof(tmp),stdin);
	system("chmod 000 ./myfile");
	for(i=0;i<1000;i++) ck(fprintf(out,"%d\n",i));
    ck(fclose(out));
    printf("exiting with no errors...\n");
    return 0;
}

output: